methods,计算属性和监视

本文详细介绍了Vue.js中methods、computed和watch的用法。methods用于定义方法,computed创建计算属性,watch则用于监听数据变化并执行相应操作。计算属性在数据变化时自动更新,而watch可以执行异步任务或复杂逻辑。文章强调了函数的this指向问题,并通过示例代码展示了三者在实际场景中的应用。

methods

<body>
<div id="app">{{info()}}</div>
<script>
   let obj={
		name:'wzm',
		age:22
	}
	const vm = new Vue({
		el:'#app',
		data:obj,
		methods:{
			info(){
			return this.name+this.age
			}
	}

})
</script>
</body>

计算属性(computed)

<body>
<div id="app">{{info}}</div>
<script>
   let obj={
		name:'wzm',
		age:22
	}
	const vm = new Vue({
		el:'#app',
		data:obj,
		computed:{
		     //精简
			info(){
			return this.name+this.age
			},  
				
			//完整	
			 // info:{
                //     get(){
                //         return this.name+'今年'+this.age
                //     },
                //     set(value){
                //         this.name=value;
                //         this.age=value;
                //     }
                // }
			
	}

})
</script>
</body>

watch

<body>
    <div id="app">
        <input type="text" v-model="name"><br/><br/>
        <input type="text" v-model="address"><br/><br/>
        <p>{{out}}</p>
    </div>
    <script>
        let info={
            name:'wzm',
            address:'hubei',
            out:'我叫wzm,来自hubei'
        }

        const vm = new Vue({
            el:'#app',
            data:info,
            watch:{
               name(value){
                  setTimeout(()=>{
                    this.out='我叫'+value+',来自'+this.address;
                },1000)
                //一秒钟得到值
                },
                address(value){
                    this.out='我叫'+this.name+',来自'+value;
                }
            }
        })
    </script>

</body>

异步任务使用监视(定时器)

computed与watch之间的区别:
1.computed能完成的功能,watch都能完成
2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步任务
两个重要的原则:
1.所被vue管理的函数,最好写成普通函数,这样this的指向才是vm或 组件实例对象
2.所有不被vue管理的函数(定时器的回调函数,ajax的回调函数,promise等),最好写成箭头函数,这样this的指向才是vm或 组件实例对象

### 计算属性与监听属性的区别及使用场景 在 Vue.js 中,计算属性(Computed Properties)监听属性(Watchers)是两种常用的工具,用于处理数据逻辑。尽管它们可以实现某些相似的功能,但其设计初衷适用场景存在显著差异。 #### 1. 计算属性 计算属性是一种基于依赖的缓存机制,适用于需要根据其他数据动态计算值的场景。当依赖的数据发生变化时,计算属性会自动重新计算并更新视图[^1]。 - **缓存机制**:计算属性具有缓存特性,只有在其依赖的数据发生变化时才会重新计算。因此,多次访问相同的计算属性不会导致重复计算,从而优化性能[^5]。 - **用法**:通过 `computed` 属性定义,返回一个函数,该函数会被 Vue 自动转换为 getter setter。例如: ```javascript computed: { uppercaseMessage() { return this.message.toUpperCase(); } } ``` - **适用场景**:当需要基于现有数据进行复杂计算或格式化输出时,计算属性是最合适的选择。 #### 2. 监听属性 监听属性通过 `watch` 配置项定义,用于观察特定数据的变化,并在变化时执行回调函数[^3]。 - **无缓存**:监听属性没有缓存机制,每次数据变化都会触发回调函数。 - **用法**:监听属性可以通过多种方式定义,包括监视单个属性、多级属性、深度监视等。例如: ```javascript watch: { message(newVal, oldVal) { console.log(`message changed from ${oldVal} to ${newVal}`); }, 'user.profile'(newVal, oldVal) { console.log(`User profile updated to`, newVal); }, user: { deep: true, handler(newVal, oldVal) { console.log('User object deeply changed'); } } } ``` - **适用场景**:当需要在数据变化时执行异步操作或开销较大的操作(如 API 调用、DOM 操作等),监听属性是更好的选择。 #### 3. 区别总结 | 特性 | 计算属性 | 监听属性 | |---------------------|----------------------------------|-----------------------------| | 缓存机制 | 有缓存,依赖不变时不重新计算 | 无缓存,每次变化都触发回调 | | 数据变化响应 | 自动响应依赖数据变化 | 手动定义回调函数 | | 使用场景 | 数据计算、格式化 | 异步操作、复杂逻辑 | #### 4. 示例对比 以下是一个对比示例,展示计算属性监听属性的不同用法: ```html <template> <div> <p>Uppercase Message: {{ uppercaseMessage }}</p> <p>Lowercase Message: {{ lowercaseMessage }}</p> <button @click="updateMessage">Update Message</button> </div> </template> <script> export default { data() { return { message: 'Hello Vue!' }; }, computed: { // 计算属性:自动响应依赖变化 uppercaseMessage() { return this.message.toUpperCase(); }, lowercaseMessage() { return this.message.toLowerCase(); } }, watch: { // 监听属性:手动处理变化 message(newVal, oldVal) { console.log(`Message changed from ${oldVal} to ${newVal}`); } }, methods: { updateMessage() { this.message = 'Vue is awesome!'; } } }; </script> ``` 在这个例子中,`uppercaseMessage` `lowercaseMessage` 是计算属性,用于动态计算消息的大小写形式。而 `message` 的变化通过监听属性记录日志。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值