文章目录
侦听器
计算属性
03-计算属性-购物车案例
混入
过滤器
侦听器
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);
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
计算属性
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:
<div id="example">
{{ message.split('').reverse().join('') }}
</div>
1
2
3
在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 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. 当依赖的值没有发生变化的时候,对里面值进行缓存
return this.message.split("").reverse().join("");
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
},
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
混入
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项
混入也可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。
<button @click="goBack">返回上一页</button>
/* 全局混入 返回上一页的代码 */
Vue.mixin({
methods: {
goBack: function () {
console.log('返回上一页');
this.$router.go(-1);
},
},
});
1
2
3
4
5
6
7
8
9
10
11
12
13
过滤器
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;
return 123;
},