vue知识点

vue
Vue常见的指令有哪些,有什么用v-if:根据表达式的值的真假条件渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建               
v-show:根据表达式之真假值,切换元素的 display CSS 属性。  
v-for:循环指令,基于一个数组或者对象渲染一个列表,vue 2.0以上必须需配合 key值 使用。  
v-bind:动态地绑定一个或多个特性,或一个组件 prop 到表达式。  
v-on:用于监听指定元素的DOM事件,比如点击事件。绑定事件监听器。  
v-model:实现表单输入和应用状态之间的双向绑定  
v-pre:跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。 
v-once:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。 
双向数据绑定的原理采用“数据劫持”结合“发布者-订阅者”模式的方式,通过“Object.defineProperty()”方法来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 
 
 
路由的跳转和传参有哪几种方式     <router-link :to="{ name: 'home', params: { key: '1', value: '跳转' } }">路由name,params方式跳转首页</router-link>
     <router-link :to="{ name: 'home', query: { key: '1', value: '跳转' } }">路由name,query方式跳转首页</router-link>
    
     <router-link :to="{ path: '/home', params: { key: '1', value: '跳转' } }">路由path,params方式跳转首页</router-link>
     <router-link :to="{ path: '/home', query: { key: '1', value: '跳转' } }">路由path,query方式跳转首页</router-link>
注意事项!!!!!!!!!!!!:
query 传参配置的是path,而params传参配置的是name,在params中配置path无效

query在路由配置不需要设置参数,而params必须设置


query传递的参数会显示在地址栏中

params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;

接收参数使用this.$router后面就是搭配路由的名称就能获取到参数的值
 
 
 
 
  <a-button type="primary" @click="goTo">路由name方式跳转</a-button>
  goTo() {
    this.$router.push({ name: 'home', params: { a: '1', b: '2' } });//推荐用params传参方式
    this.$router.push({ name: 'home', query: { a: '1', b: '2' } });
  }
  <a-button type="primary" @click="goTo">路由path方式跳转</a-button>
  goTo() {
    this.$router.push({ path: '/home', params: { a: '1', b: '2' } });//推荐用params传参方式
    this.$router.push({ path: '/home', query: { a: '1', b: '2' } });
  }
 
 
 
 
 
 
 
 
 
组件间的通讯方式有哪些1、父子组件间传参:父传子:父组件通过自定义属性传递,子组件通过props接受
                                  子传父:父组件自定义一个事件,子组件通过$emit绑定该事件并传参,父组件由函数的自带参数接受
2、通过插槽传参:slot
3、全局事件总线eventBus:对于比较小型的项目大多使用$bus,传递参数的组件通过bus.$emit('事件名',参数)传参,接收参数的组件通过Bus.$on('事件名', 参数 => {})接收
4、通过Vuex传参,使用state保存全局的数据,使用Getters、Mutations、Actions进行数据的处理和交流    
                               首先在Mutations或者Actions定义一个函数,再通过this.$store.commit('函数名',参数)对全局进行传参或修改
5、通过localStorage、sessionStorage参数
 
 
 
 
 
 
 
 
 
路由守卫的理解路由守卫是路由在跳转前、后过程中的一些钩子函数,这些函数可以让你操作一些其他的事,在后台管理中设置权限时经常看到,在实现路由跳转前校验是否有权限,有权限就可以通过,反之就会被执行其他操作,如返回首页。 
 
 
全局守卫:所有的路由切换都会执行,一般写在路由配置文件中
router.beforeEach((to, from,next) => {
  console.log(to)--到哪个页面去
  console.log(from)--从哪个页面来
  console.log(next)--一个回调函数
}
router.afterEach(to, from){};
router.beforeResolve(to, from,next){}
 组件间的路由:跟methods: {}等同级别书写
 beforeRouteEnter (to, from, next) { 
 在路由进入之前,组件实例还未渲染,所以无法获取this实例,只能通过vm来访问组件实例
 next(vm => {})}
 beforeRouteUpdate (to, from, next) {} --同一页面,刷新不同数据时调用
 beforeRouteLeave (to, from, next) {} --离开当前路由页面时调用

  路由独享:在对应的router的index.js中加入
 beforeEnter: (to, from, next) => {}
 
 
 
 
 
 
 
 
 
 
 
 
Vuex的理解Vuex :是一种专门为 Vue.js 设计的状态管理库
Vuex有五个核心方法:state, getters, mutations, actions, modules。
    使用vuex的好处:可以进行统一的状态管理,解决不同组件共享数据的问题、解决了不同视图需要变更同一状态的问题、使用vuex之后,状态变化更加清晰。 
 
state:vuex的基本数据,用来存储变量,在vue中使用:this.$store.state.属性名; 
 
getters:相当于state的计算属性,具有返回值的方法,在vue中使用:this.$store.getters.方法名 
 
mutations:提交更新数据的方法,每个mutations中的函数都有两个参数,state和prop,分别对应全局的参数和传入的参数;在vue中使用:this.$store.commit(‘mutations方法名’,值) 
 
action:和mutation的功能大致相同,不同之处在于Action 提交的是 mutations,而不是直接变更状态,而且Action可以包含异步操作,使用方式this.$store.dispatch(‘mutations方法名’,值) 
 
modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。 
 
混入的理解混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。优点:
提高代码复用性
只需要修改一个地方就可以
缺点:
命名冲突
滥用的话后期很难维护,排查问题不方便
 
 
 
混入:        分为全局混入和局部混入 局部混入只可以在当前组件内部使用 全局混入可以在任何组件中进行使用。
局部混入:多个组件引入局部混入时,一个组件中改动了mixin中的数据,另一个引入了mixin的组件中的属性和方法是不会改变的。
全局混入:在任何组件中都可以使用 需要挂载在顶级对象上
import {mixins} from "./mixins"//先引入封装的混入代码文件
Vue.mixin(mixins)//将引入的文件属性方法挂载到Vue的顶级对象上不同的组件混入是互相独立的

选项合并:当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。
比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。
组件和混入的属性方法合并优先级:

data数据冲突:mixin中的data数据和组件中的data数据冲突时,组件中的data数据会覆盖mixin中的数据;
生命周期函数:这种不算冲突,生命周期函数的名称是固定的,先执行混入里的代码再执行组件中的代码;
方法名冲突:在组件中调用该方法,调用的是组件中的方法;


 
 
 
 
 
 
 
 
 
 
 
 
 
 
插槽的理解插槽是子组件中提供给父组件使用的一个占位符,用<slot></slot>表示。父组件可以在这个占位符中填充任何模板代码,如HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。 
 
 
默认插槽:只能有一个
如:<div id="app">
       <course>免费</course>
    </div>
<template id="course">
     <div>
        <h2><slot></slot>课程</h2>
     </div>
   </template>
结果为:免费课程
具名插槽:给插槽取个名字,一个组件可以放多个插槽,而且可以放不同地方,父组件 填充内容时,可以根据这个名字把内容填充到对应插槽中。不影响默认插槽的使用。
如:<div id="app">
     <course>
        <template v-slot:header>免费</template>
     </course>
  </div>
  <template id="course">
   <div>
      <h2><slot name="header"></slot>课程</h2>
    </div>
  </template>
结果为:免费课程
 
 
 
 
 
 
 
 
 
 
 
 
 
什么是跨域,如何解决跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。配置代理:
devServer:{
proxy:{
‘/course-api’:{   //代理名称
target:’https://course.myhope365.com/api’,  //后台接口域名
changeOrign:true  //是否跨域
 pathRewrite:{
‘^/course-api’:’’  //路径重写
}
}
//第二种写法
‘/api’:{   //代理名称
target:’https://course.myhope365.com’,  //后台接口域名
changeOrign:true  //是否跨域
}

}
}
同源策略:浏览器的一个安全协议,协议主机端口要保持一致,只要有一个不一样,就是跨    域请求。
同源策略就是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的JavaScript脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制。当一个请求url的协议、域名、端口三者之间任意一个与前面页面url不同即为跨域。
解决跨域:
后台直接不做限制,放开所有请求。优点就是方便,缺点就是不安全;
JSONP原理,利用script标签不受同源策略,需要后端配合;
配置代理;
封装心得可以对请求进行统一化的管理,易于维护,同时,什么地方需要,什么地方导入就可以使用,对开发人员来说十分简便,此外,可以对请求开始前及过程中进行预处理,提高了请求的效率。 
 
 
 
 
        ​​​​​​​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值