GVKun编程网logo

Vue.js 计算属性(vue.js 计算属性姓名地点)

22

在本文中,我们将带你了解Vue.js计算属性在这篇文章中,我们将为您详细介绍Vue.js计算属性的方方面面,并解答vue.js计算属性姓名地点常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的

在本文中,我们将带你了解Vue.js 计算属性在这篇文章中,我们将为您详细介绍Vue.js 计算属性的方方面面,并解答vue.js 计算属性姓名地点常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的vue 计算属性、VUE 计算属性 vs 侦听属性、vue 计算属性不能实时计算、Vue(二) 计算属性

本文目录一览:

Vue.js 计算属性(vue.js 计算属性姓名地点)

Vue.js 计算属性(vue.js 计算属性姓名地点)

计算属性与methods方法

模板内的表达式是非常便利的,但在模板中放太多的逻辑会让模板过重且难以维护,对于复杂的逻辑应该使用计算属性
<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
  el: ''#example'',
  data: {
    message: ''Hello''
  },
  computed: {
    // a computed getter
    reversedMessage: function () {
      // `this` points to the vm instance
      return this.message.split('''').reverse().join('''')
    }
  }
})

同样用methods可以达到与computed一样的效果
<p>Reversed message: "{{ reversedMessage() }}"</p>

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

使用computed与methods最终的结果是相同的,不同的是计算属性是基于它们的依赖进行缓存的,计算属性只有在它的相互依赖改变时才会重新求值,意味着只要message不发生变化,多次访问reversedMessage 计算属性会立即返回之前的计算结果,而不必执行函数,相比之言,只要发生重新渲染,methods调用总会执行该函数,如果不希望有缓存,请使用methods

计算属性与Watched属性

Vue 确实提供了一种更通用的方式来观察与响应实例上的数据变化,你很容易滥用watch,特别是如果你之前使用过Angular JS,通常更好的方法是使用computed属性而不是命令式的watch回调
如下的例子是使用vatch来监听firstName与lastName的变化,如果变化则给fullName重新赋值,特别注意在data初始化时就要有fullName
var vm = new Vue({
  el: ''#demo'',
  data: {
    firstName: ''Foo'',
    lastName: ''Bar'',
    fullName: ''Foo Bar''
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + '' '' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + '' '' + val
    }
  }
})

上面的代码是命令式的和重复的,将它与计算属性的版本进行比较,计算属性代码非常简单清晰
var vm = new Vue({
  el: ''#demo'',
  data: {
    firstName: ''Foo'',
    lastName: ''Bar''
  },
  computed: {
    fullName: function () {
      return this.firstName + '' '' + this.lastName
    }
  }
})

 

计算属性可以设置 setter
计算属性默认只有getter,不过在需要时你也可以提供一个setter
 <script>
    var app = new Vue({
        el: "#app",
        data: { firstName: "wang", lastName: "lily2" },
        computed: {
            fullName: {
                get: function() {
                    return this.firstName + " " + this.lastName;
                },
                set: function(newValue) {
                    names = newValue.split(" ");
                    this.firstName = names[0];
                    this.lastName = names[1];
                }
            }
        }
    })
    app.fullName = ''John Doe''
    </script>
现在再运行 ,setter 会被调用,vm.firstName 和 vm.lastName 也相应地会被更新。 

vue 计算属性

vue 计算属性

有时候我们可能需要在{{}}里进行一些计算在展示出来数据: 

<div class="app"> <table border="1"> <thead> <th>学科</th> <th>分数</th> </thead> <tbody> <tr> <td>数学</td> <td><input type="text" v-model="Math"></td> </tr> <tr> <td>英语</td> <td><input type="text" v-model="English"></td> </tr> <tr> <td>化学</td> <td><input type="text" v-model="chemistry"></td> </tr> <tr> <td>总分</td> <td>{{Math + English + chemistry}}</td> </tr> <tr> <td>平均分</td> <td>{{(Math + English + chemistry)/3}}</td> </tr> </tbody> </table> </div>
var app = new Vue({ el:''.app'', data:{ Math:88, English:77, chemistry:99, } });

虽然能解决问题,但是特别不不清晰。
这种情况下,vue给我们提供了一个特别好的解决方案:计算属性
我们可以把这些计算的过程写到一个计算属性中去,然后让它动态的计算就可以了。
计算属性是vue实例中的选项:computed
通常里面每一个都是计算相关函数,返回最后计算出来的值。

<body>
<div class="app"> <table border="1"> <thead> <th>学科</th> <th>成绩</th> </thead> <tbody> <tr> <td>数学</td> <td><input type="text" v-model.number="Math"></td> </tr> <tr> <td>英语</td> <td><input type="text" v-model.number="English"></td> </tr> <tr> <td>化学</td> <td><input type="text" v-model.number="chemistry"></td> </tr> <tr> <td>总分</td> <td>{{sum}}</td> </tr> <tr> <td>平均分</td> <td>{{average}}</td> </tr> </tbody> </table> </div> <script src="jquery-3.3.1.js"></script> <script src="vue.js"></script> <script src="main.js"></script> </body>var vm = new Vue({
 el:''.app'', data:{ Math:88, English: 77, chemistry:99, }, computed:{ sum:function(){ return this.Math+ this.English+this.chemistry; }, average:function(){ return Math.round(this.sum/3); } } });

如上,计算属性一般就是用来通过其他的数据算出一个新数据,而且它有一个好处就是它把新的数据缓存下来了,当其他的数据没有发生改变,它调用的是缓存的数据,这就极大的提高了我们程序的性能。不然可以直接用用methods了,如果写在methods里,每次都会重新计算。所以用计算属性比较好,因为有缓存。

使用computed 定义方法后 可以在模板中直接用方法名 比如add得到结果 而不需要像methods 需要add()调用  初学时就出错了 值得注意一下

方法和计算属性的选用 

相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。 

我们为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。

如果没有缓存,我们将不可避免的多次执行 A !如果你不希望有缓存,就请用方法。

 

 




原文出处:https://www.cnblogs.com/chenglianjie/p/11937942.html

VUE 计算属性 vs 侦听属性

VUE 计算属性 vs 侦听属性

计算属性 vs 侦听属性

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。细想一下这个例子:

 
<div id="demo">{{ fullName }}</div>
var vm = new Vue({
  el: ''#demo'',
  data: {
    firstName: ''Foo'', lastName: ''Bar'', fullName: ''Foo Bar'' }, watch: { firstName: function (val) { this.fullName = val + '' '' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + '' '' + val } } }) 

上面代码是命令式且重复的。将它与计算属性的版本进行比较:

var vm = new Vue({
  el: ''#demo'',
  data: {
    firstName: ''Foo'',
    lastName: ''Bar'' }, computed: { fullName: function () { return this.firstName + '' '' + this.lastName } } })

vue 计算属性不能实时计算

vue 计算属性不能实时计算

computed: {
    selectMasterTables: function () {
        if (this.parameter.tableName == null) {
            return {}
        } else {
            return this.billtables
        }
    }
}

this.parameter.tableName数据已经发生了变化,但是整个计算属性不会重新执行,要怎么处理才能实时计算。

解决方法:
在Vue里面动态的给一个对象添加属性,vue是不能监听的。比如就像你这里,这个this.parameter.tableName对象一样,刚开始是一个空值'''',然后你通过赋值this.parameter.tableName=''FOBILL''’,虽然值变了但是vue是不能相应监视的。所以没有实时执行。
我们可以用vue.set来赋值

this.$set(this.parameter, ''tableName'', this.selectTableName)

Vue(二) 计算属性

Vue(二) 计算属性

模板内的表达式常用于简单的运算,当过长或逻辑复杂时,难以维护,计算属性就是解决该问题的

什么是计算属性

表达式如果过长,或逻辑更为复杂,就会变得臃肿甚至难以维护,比如:

<div>
	{{ text.split(''.'').reverse().join(''.'') }}
</div>

该表达式包含 3 个操作,并不是很清晰,可以用计算属性进行改写:

<div id="app">
    {{ reverseText }}
</div>
<script>
    var app = new Vue({
        el: ''#app'',
        data: {
            text: ''123,456''
        },
        computed: {
            reverseText: function () {
                //这里的 this 是当前的 Vue 实例
                return this.text.split('','').reverse().join('','');
            }
        }
    })
</script>

所有的计算属性都以函数的形式写在 Vue 实例内的 computed 选项内,最终返回计算结果。

计算属性的用法

除了上例简单的用法,计算属性还可以依赖多个 Vue 实例的数据。只要其中任一数据变化,计算属性就会重新执行,视图也会更新。例如,下面的实例是在展示购物车内两个包裹的总价。

<div id="app">
    {{ prices }}
</div>
<script>
    var app = new Vue({
        el: ''#app'',
        data: {
            package1: [
                {
                    name: ''iphone xs max'',
                    price: 9999,
                    count: 2
                },
                {
                    name: ''ipad pro'',
                    price: 6666,
                    count: 2
                }
            ],
            package2: [
                {
                    name: ''apple'',
                    price: 20,
                    count: 20
                },
                {
                    name: ''orange'',
                    price: 18,
                    count: 20
                }
            ]
        },
        computed: {
            prices: function () {
                var prices = 0;
                for(var i = 0; i < this.package1.length; i++) {
                    prices += this.package1[i].price * this.package1[i].count;
                }
                for(var i = 0; i < this.package2.length; i++) {
                    prices += this.package2[i].price * this.package2[i].count;
                }
                return prices;
            }
        }
    })
</script>

当 package1 和 package2 中的商品有任何变化时,比如购买数量变化或增删商品时,计算属性 prices 就会自动更新,视图中的 prices 也会自动变化。

geter 和 setter

每一个计算属性都包含一个 getter 和一个 setter,上面的两个例子都是计算属性的默认用法,只是利用了 getter 来读取,在你需要时,也可以提供一个 setter 函数,当手动修改计算属性的值时就会触发 setter 函数,执行一些自定义操作,例如:

<div id="app">
    {{ fullName }}
</div>
<script>
    var app = new Vue({
        el: ''#app'',
        data: {
            firstName: ''Jack'',
            lastName: ''Green''
        },
        computed: {
            fullName: {
                //	getter, 用于读取
                get: function () {
                    return this.firstName + '' '' + this.lastName;
                },
                //	setter,写入时被触发
                set: function (newValue) {
                    var names = newValue.split('' '');
                    this.firstName = names[0];
                    this.lastName = names[names.length - 1];
                }
            }
        }
    })
</script>

当在浏览器的控制台执行 app.fullName = ''John Doe''; 时,setter 就会被调用,数据 firstName 和 lastName 都会相对更新,视图也会更新。

绝大多数情况下,我们只会用默认的 getter 方法来读取一个计算属性,在业务中很少用到 setter,因此在声明一个计算属性时,直接使用默认的方法即可,不必将 getter 和 setter 都声明。

计算属性除了上述简单的文本插值外,还经常用于动态地设置元素的样式名称 class 和内联样式 style。当使用组件时,计算属性也常用于动态传递 props。

计算属性还有两个很实用的小技巧:一个计算属性可以依赖其他的计算属性;二是计算属性不仅可以依赖当前 Vue 实例的数据,还可以依赖其他实例的数据。

计算属性缓存

在上一篇介绍指令和时间时,你可能发现调用 methods 里的方法也可以与计算属性起到同样的作用,比如本章第一个示例可以用 methods 改写为:

<div id="app">
    {{ reverseText() }}
</div>
<script>
    var app = new Vue({
        <!-- 注意:这里的 reverseText 是方法,所以要带() -->
        el: ''#app'',
        data: {
            text: ''123,456''
        },
        methods: {
            reverseText: function () {
                //这里的 this 是当前的 Vue 实例
                return this.text.split('','').reverse().join('','');
            }
        }
    })
</script>

没有使用计算属性,在 methods 里定义了一个方法实现了相同的效果,甚至该方法还可以接受参数,使用起来更灵活。那为什么还需要计算属性呢?原因就是计算属性是基于它的依赖缓存的,一个计算属性所依赖的的数据发生变化时,它才会重新取值,所以 text 只要不改变,计算属性也就不更新,例如:

computed: {
    now: function() {
        return Date.now();
    }
}

这里的 Dtae.now() 不是响应式依赖,所以计算属性 now 不会更新。但是 methods 则不同,只要重新渲染,它就会被调用,因此函数也会被执行。

使用计算属性还是 methods 取决于你是否需要缓存,当遍历大数组和大量计算时,应当使用计算属性,除非你不希望得到缓存。

关于Vue.js 计算属性vue.js 计算属性姓名地点的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于vue 计算属性、VUE 计算属性 vs 侦听属性、vue 计算属性不能实时计算、Vue(二) 计算属性等相关内容,可以在本站寻找。

本文标签: