文章目录
侦听器
Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
<template><div id="app"><router-view /><h1>侦听器基本使用</h1><h2>{{ msg }}</h2><h3>{{ obj.name }}</h3><button @click="msg = '123'">点击修改msg</button><button @click="obj.name = '456'">点击修改obj.name</button></div></template>
watch:{
msg: function (val, oldVal){
console.log("新的值:%s,旧的值:%s", val, oldVal);},
计算属性
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:
<div id="example">{{ message.split('').reverse().join('')}}</div>
在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。
所以,对于任何复杂逻辑,你都应当使用计算属性。
<template><div class=""><!--<h1>{{ message.split("").reverse().join("")}}</h1>--><h1>{{ reservedMessage }}</h1><button @click="message = 'thomas'">改message</button><h2>{{ fullName }}</h2><h3>{{ otherValue }}</h3><button @click="fullName = 'thomas'">fullName赋值</button></div></template>
computed:{
reservedMessage: function (){// return 123;// 1. 依赖的值发生变化的时候,属性重新进行运行,返回一个新的值// 2. 当依赖的值没有发生变化的时候,对里面值进行缓存returnthis.message.split("").reverse().join("");},
03-计算属性-购物车案例
<template><div class=""><section v-for="cart in carts":key="cart.id">
数量: <span>{{ cart.num }}</span> 名称:<span>{{ cart.name }}</span>
价格:<span>{{ cart.price }}</span
><button @click="++cart.num">+</button
><button @click="cart.num--">-</button>// <section>// 总价:{{// carts.reduce((total, v) => {// return (total += v.num * v.price);// }, 0)// }}// </section> <section>总价:{{ totalPrice }}</section></div></template>computed:{totalPrice:function(){let num =0;this.carts.forEach((v)=>{
num += v.num * v.price;});return num;// return this.carts.reduce((total, v) => {// return (total += v.num * v.price);// }, 0);},},
混入
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项
混入也可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。
<button @click="goBack">返回上一页</button>/* 全局混入 返回上一页的代码 */
Vue.mixin({methods:{goBack:function(){
console.log('返回上一页');this.$router.go(-1);},},});
过滤器
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
<template><div class=""><!--<h1>{{ message.charAt(0).toUpperCase()+ message.slice(1)}}</h1>--><h1>{{ message | capitilize | dateFormatFilter }}</h1></div></template>capitilize:function(value){if(!value)return"";return value.charAt(0).toUpperCase()+ value.slice(1);},dateFormatFilter:function(value){//// return value;return123;},
版权归原作者 小卢要刷力扣题 所有, 如有侵权,请联系我们删除。