• vue computed属性使用


    使用报错[Vue warn]: Computed property "localValue" was assigned to but it has no setter.

    代码:

    <a-input
         class="search-input"
        v-model.trim="localValue"
        :allow-clear="true"
        :placeholder="inputPlaceholader"
        @change="onInput">
    </a-input>
    
    computed: {
         localValue () {
            return this.content
        }
    }
    

    报错原因

    computed计算属性默认只有getter方法,所以只能获取,不能设置。而v-model是数据的双向绑定,当输入框的值变化时,localValue也会跟着变化,但localValue没有设置setter方法,所以会报错。

    computed的setter

    有需要时,我们可以提供一个setter:

    localValue: {
        get () {
            return this.content
        },
        set (value) {
            this.content = value
        }
    }
    

    设置setter之后,localValue就可以被重新赋值。

    备注:当localValue值变化时,content也会一起变化

    知识扩展

    computed计算属性与方法的区别

    例子如下:

    <p>Reversed message: "{{ reversedMessage }}"</p>
    
    computed: {
        reversedMessage () {
               return this.message.split('').reverse().join('')
        }
    }
    

    同样也可以用methods中的方法来实现同样的效果:

      methods: {
        reversedMessage () {
               return this.message.split('').reverse().join('')
        }
      }
    

    什么时候用计算属性什么时候用方法,要根据不同的需求来判断。

    两者的不同点在于:计算属性是基于它们的响应式依赖进行缓存的,只要message的值不发生改变,
    reversedMessage访问时会返回以前的计算结果,而不会重新计算。而方法在访问时,总会触发再次执行。

    所以,如果我们需要缓存,不想每次都计算,就使用计算属性;如果不需要缓存,就使用方法。

    监听watch与计算属性

    通常情况下,当某个数据随着其他数据变动而变动时,我们最常用的就是计算属性而不是watch监听,但在数据需要异步执行时,watch方法才是最有效的。

    例如:

    watch: {
         localValue (value) {
           this.getData(value) // 请求接口,获取数据
       }
    }
    

    在这里,当localValue数据发省变化时,watch方法允许我们去访问API,这是计算属性无法做到的。

  • 相关阅读:
    ios 人脸检测
    改善用户体验的几个alert提示效果(收集整理)
    asp.net中关于《%=》《%#》《%》 的用法——(转帖)
    flash学习网址
    网页数据表格自动填充序号
    <%#..%>与<%=..%>的区别
    用Margin还是用Padding
    由浅入深漫谈margin属性
    css中导入样式表和链接样式表有什么区别,我不是问语法,而是问内在区别,还有我怎么才能体会到他们的区别
    ASP.NET Eval如何进行数据绑定
  • 原文地址:https://www.cnblogs.com/wangyingblock/p/14978463.html
Copyright © 2020-2023  润新知