watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作
当我们给某个数据对象加上侦听器后,一旦该对象的值发送改变,就会触发我们在监听器上自定义的函数,从而执行我们在函数中定义的的操作。
(1)使用:
在Vue实例的watch节点下,以该数据对象的名称为方法名,定义函数。
函数中会有两个默认参数:
1、数据对象被改变后的新值 newVal
2、数据对象被改变前的旧值 oldVal
(2)缺点:
1、无法在刚进入页面的时候,自动触发
2、如果侦听的是一个对象,如果对象中的属性发生了变化,不会触发侦听器
(3)语法格式:
<div id="app">
<input type="text" v-model="username">
</div>
const vm = new Vue({
el: '#app',
data: {
username: 'admin'
},
// 所有的侦听器,都应该被定义到 watch 节点下
watch: {
// 侦听器本质上是一个函数,要监视哪个数据的变化,就把数据名作为方法名即可
// 新值在前,旧值在后
username(newVal, oldVal) {
console.log(newVal)
})
}
}
})
在watch节点下,以该数据对象的名称创建对象格式的侦听器,并在对象内创建hander(newVal,oldVal)
方法,来响应数据对象值的改变。
(2)好处
1、可以通过 immediate 选项,让侦听器自动触发
2、可以通过 deep 选项,让侦听器深度监听对象中每个属性的变化
(3)immediate 选项
默认情况下,Vue的组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项。
示例代码如下
watch: {
// 定义对象格式的侦听器
username: {
// 侦听器的处理函数
handler(newVal, oldVal) {
console.log(newVal, oldVal)
},
// immediate 选项的默认值是 false
// immediate 的作用是:控制侦听器是否在组件加载后就立刻自动触发一次!
immediate: true
}
}
(4)deep 选项
如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。
此时需要使用 deep 选 项,同时监听该对象的属性变化。
data: {
// 用户的信息对象
info: {
username: 'admin'
}
},
watch: {
info: {
handler(newVal) {
console.log(newVal.username)
},
// 开启深度监听,只要对象中任何一个属性变化了,都会触发“对象的侦听器”
deep: true
}
}
也可以直接监听该对象的单个属性
watch: {
// 如果要侦听的是对象的子属性的变化,则必须包裹一层单引号
'info.username'(newVal) {
console.log(newVal)
}
}
计算属性指的是通过一系列运算之后,最终得到一个属性值。
这个动态计算出来的属性值可以被模板结构或 methods 方法使用。
计算属性应定义在Vue实例的computed节点下,并以方法的形式定义,方法内最后必须return一个字符串
2、计算属性的特点
① 虽然计算属性在声明的时候被定义为方法,但是计算属性的本质是一个属性
② 计算属性会缓存计算的结果,只有计算属性依赖的数据变化时,才会重新进行运算
<div>
<span>R:</span>
<input type="text" v-model.number="r">
</div>
<div>
<span>G:</span>
<input type="text" v-model.number="g">
</div>
<div>
<span>B:</span>
<input type="text" v-model.number="b">
</div>
<span>“结果为”+ {{ rgb }}</span> //显示计算属性的值
<script>
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
// 红色
r: 0,
// 绿色
g: 0,
// 蓝色
b: 0
},
// 所有的计算属性,都要定义到 computed 节点之下
// 计算属性在定义的时候,要定义成“方法格式”
computed: {
// rgb 作为一个计算属性,被定义成了方法格式,
// 最终,在这个方法中,要返回一个生成好的 rgb(x,x,x) 的字符串
rgb() {
return `rgb(${this.r}, ${this.g}, ${this.b})`
}
}
});
</script>
vue-cli 是 Vue.js 开发的标准工具。它简化了程序员基于 webpack 创建工程化的 Vue 项目的过程
使得程序员可以专注在撰写应用上,而不必花好几天去纠结 webpack 配置的问题。
vue-cli 是 npm 上的一个全局包
(1)使用 npm install 命令,即可方便的把它安装到自己的电脑上:
npm install -g @vue/cli
(2)基于 vue-cli 快速生成工程化的 Vue 项目的命令:
vue create 项目的名称
(3)然后选择自己项目所需要用到的包,vue-cli会自动帮你安装到项目中
(4)然后就会在项目根目录下生成以下文件夹结构:
3、部分生成文件介绍
在工程化的项目中,vue 只需要通过 main.js 把 App.vue 渲染到 index.html 的指定区域中。
(运行npm run build后,webpack会将项目中的.vue组件打包,并在项目根目录生成dist文件夹,其中的index.html文件内容就是App.vue渲染上去的)
其中:
assets 文件夹:存放项目中用到的静态资源文件,例如:css 样式表、图片资源
components 文件夹:程序员封装的、可复用的组件,都要放到 components 目录下
main.js 是项目的入口文件。整个项目的运行,要先执行 main.js
App.vue 是项目的根组件
这里会涉及到webpack相关的知识,因为vue-cli本身就是基于webpack帮我们创建并配置工程化的前端新项目,如果你们还有些迷惑,可以看看我之前写的(前端工程化:Webpack之常见配置详解(干货))
不知道大家看完后,是否会产生一个疑问,我在文章中提到的Vue组件是什么呢?它有什么作用?....
下一篇文章我将与大家分享Vue组件及其生命周期的相关知识
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有