VUE的计算属性与监听属性

vue计算属性

methods与computed的区别
  • computed是属性调用,而methods是函数调用;
  • computed带有缓存功能,而methods不是;
  • 我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。
  • 可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

VUE的监听属性

  • watch为VUE的监听属性,当监听的对象值改变时就会触发。
    <div id='app'>
        <input type="text" name="text" id="text" v-model="m" />
        <button type="button" @click="fn">修改m的值</button>
        <h1>{{userTime}}</h1>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                m: 111,
                userTime: "",

            },
            methods: {
                fn() {
                    this.m = 6000
                }
            },
            watch: {
                m(newdata) {
                    this.userTime = (parseInt(newdata / 1000)) + "秒"
                    console.log(this.userTime)
                },
            }
        })
    </script>

用VUE属性做前端验证

<style type="text/css">
	.norm{
		border: 1px solid black;
	}
	.success{
		border: 1px solid green;
	}
	.danger{
		border: 1px solid red;
	}
</style>
<div id='app'>
	<input type="text" v-model.lazy="userid" :class="useridclass"/>
</div>
<script>
	new Vue({
		el: '#app',
		data: {
			userid: "",
			useridclass:"norm"
		},
		watch: {
			userid(newdata) {
				var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
				if(reg.test(newdata)){
					this.useridclass="success"
				}
				else{
					this.useridclass="danger"
				}
			}
		}
	})
</script>

VUE监听属性的触发机制

借鉴别人的代码例子如下:

		<div id="computed_props">
			分 : <input type="text" v-model="minutes">
			秒 : <input type="text" v-model="seconds">
		</div>

		<script type="text/javascript">
			var vm = new Vue({
				el: '#computed_props',
				data: {
					minutes: 0,
					seconds: 0
				},
				methods: {},
				computed: {},
				watch: {
					minutes: function(val) {
						console.log("minutes监听")
						this.minutes = val;
						this.seconds = val * 60;
					},
					seconds: function(val) {
						console.log("seconds监听")
						this.minutes = val / 60;
						this.seconds = val;
					}
				}
			});
		</script>

假设当我们在分的输入框输入6,则触发了minutes监听。在minutes监听方法中val=6、minutes=6、seconds=360,这时seconds 改变了值。继而触发seconds监听,在seconds监听方法中val=360、minutes=6、seconds=360。这里会再触发一次minutes监听,监听中发现minutes、seconds并没有改变,不再触发其他监听事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值