三、vue常用特性
vue常用特性
一、computed
计算属性:
1 <div id="app"> 2 <!-- 当多次调用 cfn计算属性时只要里面的 num值不改变,它会把第一次计算的结果直接返回直到data中的num值改变 计算属性才会重新发生计算 --> 3 <div>{{ cfn }}</div> 4 <div>{{ cfn }}</div> 5 <!-- 调用methods中的方法的时候 他每次会重新调用 --> 6 <div>{{ fn() }}</div> 7 <div>{{ fn() }}</div> 8 </div> 9 <script src="./js/vue.js"></script> 10 <script type="text/javascript"> 11 const vm = new Vue({ 12 el: "#app", 13 data: { 14 num: 10, 15 }, 16 // 方法 17 methods: { 18 fn() { 19 console.log("methods"); 20 return this.num; 21 }, 22 }, 23 // 计算属性(作为属性使用) 24 computed: { 25 cfn() { 26 console.log("computed"); 27 return this.num; 28 }, 29 }, 30 }); 31 </script>
注:
二、watch
监听器:使用watch监听data中数据的变化,watch中的属性一定是data中存在的数据
1、声明监听器关键词是watch
2、每个监听器的方法可以接收2个参数,第一个参数是新的值,第二个值是之前的值
1 <div id="app"> 2 <p><input type="text" v-model='userinfo.firstName' placeholder="姓" /></p> 3 <p><input type="text" v-model='userinfo.lastName' placeholder="名" /></p> 4 <p><input type="text" v-model='userinfo.fullName' placeholder="全名" /></p> 5 </div> 6 7 <script src="./js/vue.js"></script> 8 <script type="text/javascript"> 9 const vm = new Vue({ 10 el: '#app', 11 data: { 12 userinfo: { 13 firstName: '', 14 lastName: '', 15 fullName: '' 16 } 17 }, 18 watch: { 19 userinfo: { 20 // handler是固定的写法 21 handler(val) { 22 this.userinfo.fullName = val.firstName + ' ' + val.lastName 23 // 对象支持引用传值 24 val.fullName = val.firstName + ' ' + val.lastName 25 }, 26 // immediate表示在watch中首次绑定的时候,是否执行handler 27 immediate: true, 28 deep: true 29 } 30 } 31 }) 32 </script>
当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听。
三、filters
过滤器:
1 <!-- 在双花括号中 --> 2 {{ message | capitalize }} 3 4 <!-- 在 `v-bind` 中 --> 5 <div v-bind:id="rawId | formatId"></div>
1 <div id="app"> 2 <div> 3 {{message | filterName}} 4 </div> 5 </div> 6 7 <script src="./js/vue.js"></script> 8 <script> 9 new Vue({ 10 el: '#app', 11 data: { 12 message: '123', 13 phone: '' 14 }, 15 // 过滤器 16 filters: { 17 filterName(num){ 18 // 对num做一些处理 19 } 20 } 21 }) 22 </script>
四、mixins
混入:
当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”,合并策略:
1、
2、
3、值为对象的选项,例如 methods
、components
和 directives
1 var mixin = { 2 created: function () { console.log(1) } 3 } 4 var vm = new Vue({ 5 created: function () { console.log(2) }, 6 mixins: [mixin] 7 }) 8 // 输出顺序 1 2
局部混入(按需混入)
1 <script src="./js/vue.js"></script> 2 <script type="text/javascript"> 3 // 定义一个混入对象(局部混入) 4 var myMixin = { 5 created: function () { 6 this.hello(); 7 }, 8 methods: { 9 hello: function () { 10 console.log("hello from mixin!"); 11 }, 12 }, 13 }; 14 // Vue实例 15 const vm = new Vue({ 16 mixins: [myMixin], 17 }); 18 </script>
全局混入(强制混入)
1 <script src="./js/vue.js"></script> 2 <script type="text/javascript"> 3 // 全局混入 4 Vue.mixin({ 5 created: function () { 6 var myOption = this.myOption; 7 if (myOption) { 8 console.log(myOption); 9 } 10 }, 11 }); 12 // vue实例 13 new Vue({ 14 data: { 15 myOption: "hello!", 16 } 17 }); 18 </script>