computed,watch,filter的区别

computed

翻译过来是计算出来,意思是某个属性 是依靠其他的模型变量进行得来的

<body>
<p>
//在这里插值的是computed里面的change函数
    <input type="text" v-model="username">{{ change}}
</p>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "p",
        data: {
        //这里已经定义的模型变量不能在computed里面再定义一次,否则会报错
           username:''
        },
        computed:{
       //在这里change定义为一个函数,但是调用时为一个属性
            change(){
                if(!this.username){
                    return '用户名不能为空 '
                }
                if( this.username.length<=3){
                    return '用户名不能少于三位'
                }
                if(this.username.length>=10){
                    return '用户名不能超过十位'
                }
            }
        }
    })
//在这里change函数是依靠data中的username这个模型变量的变化进行得来的
</script>
</body>

watch

翻译过来是监视的意思,监视某个模型的变化

<body>
<p>
//这里插值的是变量信息
    <input type="text" v-model="username">{{ msg }}
</p>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "p",
        data: {
           username:'',
            msg:''
        },
        watch:{
        //**这里的函数名必须是模型变量里面有的变量** 
            username(){
                if(!this.username){
                    this.msg='用户名不能为空'
                    return
                }
                if(this.username.length<=3){
                    this.msg='用户名不能小于三位'
                    return
                }
                if(this.username.length>=10){
                    this.msg='用户名不能超过十位'
                    return
                }
            }
        }
    })

</script>
</body>

总结一下:
由上面的例子我们知道了
1,computed与watch的使用方法不一样,
computed:在computed里面定义一个函数,这个函数会返回一个值,然后在插值表达式里面调用它,而且这里是函数的方式定义,属性的方式调用
watch:在watch中定义一个函数,但是在模型里面还要定义一个属性msg(名字随便取的),通过watch里面这个函数去改变msg的值,在插值表达式中调用msg
2,函数名不一样,computed里面定义的函数名不能使用模型变量里面已经有的,否则会报错,watch里面函数名必须是你要监视的那个变量,所以必须是data里面有的属性,
3,虽然最后用户看到的结果都是一样的,但是computed return返回一个值,watch是改变一个值,不过在日常需求下用两个其实没有太大的区别
4,但是如果存在异步函数,例如ajax,return就没有意义,但是其实我刚刚在上面做的表单验证都是前端的验证,真正的验证是要通过数据库查询该用户是否存在,这就一定要用到ajax,用到它就有了异步操作,这个时候return就没有意义了
这个时候computed就不再适用了,要使用watch这个方法

filter

翻译过来是过滤器的意思,负责数据的处理,也叫作变量调节器
vuejs 1.x版本中已经把内置的filter移除了,但是这个方法还是存在的,支持程序员自定义过滤器
1,vue 1.x里面的过滤器,先把1.x版本的vue引进来,在插值表达式中如下书写代码
{{ A| B }},A的输出作为B的输入,B对A的输出做一些处理再输出
2,下面的例子中currency是将price保留两位小数,并且在前面加上$符号

<body>
<p>
    {{ price |currency }}
</p>
<script src="https://cdn.bootcss.com/vue/1.0.27/vue.js"></script>
<script>
    var vm = new Vue({
        el: "p",
        data: {
           price:2.32542332
        }
    })
</script>
</body>

vue 2.x中虽然没有内置的过滤器了,但是我们可以自定义
这里有两种过滤器,一种是全局过滤器,一种是局部过滤器
(1)全局过滤器

  • 直接定义在Vue上,而且必须写在实例对象的前面
  • Vue.filter(参数一,参数二),
    ------- 参数一:过滤器名称,必须加引号,
    ------- 参数二:是一个函数,是过滤器的实现代码,这个函数同样有两个参数,
    ---------------------参数一:是模型变量,也就是上一个的输出,
    ---------------------参数二:是其他参数,代表用户的传参
<p>
    {{ price |toFixed(2)}}//保留两位小数
</p>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.filter('toFixed',(input,parmas)=>{
         return  input.toFixed(parmas)
     })
    var vm = new Vue({
        el: "p",
        data: {
           price:2.32542332
        }
    })

</script>
</body>

(2)局部过滤器

  • 这个过滤器是写在vm控制器里面的,
  • toFixed(参数一,参数二)
    ------参数一:是模型变量,也就是上一个的输出,
    ------参数二:是其他参数,代表用户的传参
<body>
<p>
    {{ price |toFixed (2)}}//保留两位小数
</p>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  
    var vm = new Vue({
        el: "p",
        data: {
           price:2.32542332
        },
         filters:{
             toFixed(input,parmas){
                 return  input.toFixed(parmas)
             }
        }
    })

</script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值