2-05-侦听器

一、什么是watch侦听器

watch侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。

语法格式如下:

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
32
33
34
35
36
37
<body>

<div id="app">

<input type="text" v-model="username">

</div>

</body>

<script src="./vue.js"></script>

<script>

new Vue({

el: "#app",

data: {

username: ""

},

watch: {

username(newVal, oldVal) {

console.log(`监听到数据变化:${oldVal} -> ${newVal}`);

}

}

});

</script>

二、使用watch检测用户名是否可用

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<body>

<div id="app">

<input type="text" v-model="username">

</div>

</body>

<script src="./vue.js"></script>

<script src="./axios.min.js"></script>

<script>

new Vue({

el: "#app",

data: {

username: ""

},

watch: {

async username(newVal) {

if (newVal === '') return;

const { data: res } = await
axios.get('https://www.escook.cn/api/finduser/' + newVal);

console.log(res);

}

}

});

</script>

## 三、immediate选项

刚进入页面的时候,默认的侦听器是不会触发,如果一定要触发,就必须添加immediate选项,用法如下:

watch: {

username: {

handler(newVal, oldVal) {

console.log(newVal, oldVal);

},

immediate: true

}

}

四、deep选项

如果侦听的是一个对象,对象内部的属性发生变化,侦听器默认是不会被触发的。为了解决这个问题,就有了deep选项。

deep的用法如下:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<body>

<div id="app">

<input type="text" v-model="info.username">

</div>

</body>

<script src="./vue.js"></script>

<script>

new Vue({

el: "#app",

data: {

info: {

username: ""

}

},

watch: {

info: {

handler(newVal) {

console.log(newVal.username);

},

deep: true

}

}

});

</script>

五、侦听单个属性

如果直接侦听对象info中的username属性,可以这么写:

1
2
3
4
5
'info.username'(newVal) {

console.log(newVal);

}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!