Vue配置项


Vue配置项(实例属性)

这篇总结主要介绍Vue配置项

1. el : 挂载点

推荐使用 id 选择器
不可以是 HTML 和 Body

写法:
方法一:直接在data对象种直接指定容器el:'#root'
方法二Vue . $mount('#root')

2. data : 数据存储

语法: 模板语法 {{ data数据 }}
特点:响应式,data数据变化了,页面会自动更新

写法:
第一种对象式:

data:{
  name:'某某'
}

第二种函数式

data() {
  return{
    name:'黑马'
    }
}

注意:
由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再指向Vue实例了,而是指向window,都必须要写成普通函数

3. methods 存储方法

this指向 vue实例
如何在在methods中访问vue数据? this.属性名

注意

1.使用的事件的回调需要配置在methods对象中,最终会在vm上
2.methods中配置的函数,不要用箭头函数!否则this就不是vm了
3.methods中配置的函数,都是被vue所管理的函数,this的指向是vm 或 组件实例对象

4. computed 计算属性

作用: 解决模板语法冗余

原理:底层借助了Obeject.defineproperty方法提供的getter和setter。

语法:

//简写  只用get方法时才能简写
computed:{
    //简写
    fullName(){
        return this.xing + this.ming
    }
}

//全写
computed:{
      fullName:{
          get(){},
          set(value){}
   }
}
//value就是你修改的值----fullName
//也就是说你计算的那个计算的属性的当时的状态
//get方法必须写return
//set则是不写

优势:

与methods相比,内部有缓存机制,保存了第一次读取时的数据,以后只有依赖数据未发生改变,就不会调用getter,直接读取缓存,效率更高,调试方便

get函数什么时候执行?
1.初次读取时会执行一次
2.当依赖的数据发生改变时会再次调用

计算属性虽然在书写的时候是一个函数,但最终还是会被vue处理成一个属性,直接写他的方法名即可

5. watch : 侦听器

作用 : 侦听vue中某一个数据变化
语法:

//深度监听   写在Vue实例里面
watch: {
         data中的数据属性: {
              immediate:true, //初始化时让handler调用一下
              //什么时候调用handler?当被监视的属性发生改变时
              //参数 newValue 新值 oldValue旧值
              handler(newValue, oldValue) {
                        log(newValue,oldValue)
                  }
              }
          }
//写在Vue实例外面
vm.$watch('data中的数据属性', {
            immediate: true, //初始化时让handler调用一下
            //什么时候调用handler?当被监视的属性发生改变时
            //参数 newValue 新值 oldValue旧值
            handler(newValue, oldValue) {
                         log(newValue,oldValue)
      }
 })

//简写  即不进行深度监听才能使用简写
watch: {
     //完整
     /*hot: {
     //immediate:true,//初始化时,让handler调用以下
     //handler什么时候调用?当hot发生改变时
     handler(newValue, oldValue) {
     console.log('hot被修改了', newValue, oldValue);
     }
     }*/
     //简写
     hot(newValue, oldValue) {
         console.log('hot被修改了', newValue, oldValue);
     }
}
// 写在外面
vm.$watch('hot', function (newValue, oldValue) {
    console.log('hot被修改了', newValue, oldValue);
})

应用场景: 数据的变化 需要执行相同的业务(实时监听数据的变化)

何时被调用?

1.当被监视的属性发生改变时
2.immediate为true时,初始化自动调用

注意:
1.当监视属性变化时,handler回调函数自动调用
2.监视的属性必须存在,才能监视

watch与computed之间的区别

1.computed能完成的功能,watch都可以完成
2.watch能完成的功能,computed不一定能完成,例如watch可以进行异步操作
3.计算属性是无法维护异步操作的数据的
两个重要的原则
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件对象
2.所有不被vue所管理的函数(定时器的回调函数,ajax的回调函数 promise的回调函数等),最好写成箭头函数,这样的this才指向vm 或 组件实例对象

6. name:

vue-devtools工具中的组件名由name决定

命名规范:
大驼峰 + 横杠命名法
多个单词组成

7. components 注册组件

当你创建了一个父子组件,在父组件中使用子组件,如何使用?

1.导入子组件
2.在components中注册子组件
3.在模板中使用子组件

8. props 传值接收

父给传子传值,使用props接收

9. directives 自定义指令

自定义语法何时会被调用?
1.指令与元素成功绑定时
2.指令所在模板被重新解析时

两种注册方式

//局部指令  写在Vue实例
new Vue({
  directives:{
    指令名 : {
        // (1)inserted : 指令第一次使用执行
        inserted(el,binding){
           // el是指令所在的dom , binding.value是指令值
        },
        // (2)update : 指令值变化
        update(el,binding){

        }
    }
}
})
// 全局指令       全局自定义指令(在main.js注册,任何组件使用
Vue.directive( '指令名' , {
     inserted(el,binding){},
     update(el,binding){}
} )

配置对象中常用的3种回调名:
1.bind函数:指令与元素成功绑定时调用
2.inserted函数:指令被添加在标签上时,自动被调用
3.update函数:指令所在模板结构被重新调用

这里面的回调函数,同样是能收到element,binding两个参数

备注
1.指定定义时不加v-,但使用时要加v-
2.指令名如果是多个单词,要使用kebeb-case命名方式,不要使用camelCase命名

10. filters过滤器

语法:
第一步:在data配置项中,配置 data数据中的属性名
第二步:data数据中的属性名 | filters中的方法名
第三步:创建filters配置项,方法名(data数据中的属性名),这里面是形参

1.只能使用在插值表达式和v-bind属性绑定
2.过滤器应该添加在表达式的尾部,由管道符进行调试 |
3.filters与data配置项同级,过滤器必须要有返回值 return
4.使用filters,最终的值是filters的返回值,而不是data中的属性名的值
过滤器函数形参中的val,永远都是管道符前面的那个值
5.本质是一个函数,并且只支持在vue2使用

<div id="root">
     <p>{{name | a}}</p> //data中的属性名 | filters中的方法名
    </div>
    <script>
        Vue.config.productionTip = false
        new Vue ({
            el:'#root',
            data:{
                name:'hello vue'    //配置数据
            },
            filters:{
                a(val) {   //val拿到data中的属性名
                    //charAt(索引值),获取字符串对应的字符
                    //toUpperCase(),让字符串大写
                    let first = val.charAt(0).toUpperCase()
                    //sclice(从哪截取,到哪结束)
                    let last = val.slice(1)
                    return `${first}${last}`
                }
            }
        })
    </script>
私有过滤器和全局过滤器

私有过滤器:在filters配置项中定义的过滤器方法,只能在当前的vm实例所控制的el区域使用
全局过滤器:在vue实例对象外部定义的方法,能够让所有vue实例都能使用

语法:Vue.filter(全局过滤器的方法名,全局过滤器的处理函数)

例如:Vue.filter('方法名',(data中配置属性名)=>{ return 返回值 })

注意
1.全局过滤器的单词是filter,最后面没有s
2.全局需要定义在vue实例对象的前面,因为js是单线程的
3.如果全局过滤器和私有过滤器名字一致,此时按照就近原则,调用私自的过滤器,不会调用全局的过滤器

<div id="root">
        <p>{{name | a}}</p>
    </div>
    <div id="root2">
        <p>{{name | a}}</p>
    </div>
    <script>
        Vue.config.productionTip = false
        //全局过滤器
        Vue.filter('a',(val)=> {
            return val.charAt(0).toUpperCase() + val.slice(1)
        })
        new Vue ({
            el:'#root',
            data:{
                name:'hello vue'
            },
            //私有过滤器
            //在调用时,采取就近原则,调取自身的过滤器
            filters:{
                a(val) {
                    //charAt(索引值),获取字符串对应的字符
                    //toUpperCase(),让字符串大写
                    let first = val.charAt(0).toUpperCase()
                    //sclice(从哪截取,到哪结束)
                    let last = val.slice(1)
                    return `${first}${last}`
                }
            }
        })
        new Vue ({
            el:'#root2',
            data:{
                name:'sb,今天不开心'
            }
        })
    </script>

11. _mixin混入(配置项)

功能:可以将多个组件共用的配置提取成一个混入对象,再将这个混合对象引入
data中的数据比mixin传过来的数据优先级更高
在写mixins配置项时,一定要记得加s
步骤
1.创建一个混入文件,mixin.js
2.在混入文件中定义混合,例如:

export const mixin = {
  data(){...},
  methods:{...}
}

3.在需要是使用混入的组件中,使用混入,例如:

1.全局混入:在main中引入mixin   import {mixin} from '../mixin'
          在main中配置mixin    Vue.mixin(mixin)
2.局部混入:在局部组件中引入mixin
          在局部组件中配置mixins:['xxx']

文章作者: 冷杨威
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 冷杨威 !
  目录
-->