Detailed explanation of Vue.js calculation and use of listener properties

php中世界最好的语言
Release: 2018-05-12 14:18:51
Original
1670 people have browsed it

This time I will bring you a detailed explanation of Vue.js calculation and use of listener properties. What are theprecautionsfor Vue.js calculation and use of listener properties. The following is a practical case. Let’s take a look. take a look.

1. Overview

Calculated properties

Theexpressionin the template is very convenient, but They were originally designed for simple calculations. Putting too much logic into a template can make it overweight and difficult to maintain. For example:

{{ message.split('').reverse().join('') }}

Copy after login

Here, the template is no longer simple declarative logic. You have to watch for a while to realize that here you want to display the flippedStringof the variable message. It becomes more difficult to deal with when you want to reference the flipped string here multiple times in the template.

So, for any complex logic, you should use computed properties.

Basic example

Original message: "{{ message }}"

Computed reversed message: "{{ reversedMessage }}"

var vm = new Vue({ el: '#example', data: { message: 'Hello' }, computed: { // 计算属性的 getter reversedMessage: function () { // `this` 指向 vm 实例 return this.message.split('').reverse().join('') } } })
Copy after login

Result:

## Here we declare a calculated property reversedMessage. The function we provide will be used as the getter function of the property vm.reversedMessage

console.log(vm.reversedMessage) // => 'olleH' vm.message = 'Goodbye' console.log(vm.reversedMessage) // => 'eybdooG'
Copy after login
You can bind computed properties in the template just like normal properties. Vue knows that vm.reversedMessage depends on vm.message, so when vm.message changes, all bindings that depend on vm.reversedMessage are also updated. And the best part is that we've created this dependency declaratively: the computed property's getter function has no side effects, making it easier to test and understand.

2. Computed property cache vs method

You may have noticed that we can achieve the same effect by calling methods in expressions

Reversed message: "{{ reversedMessage() }}"

// 在组件中 methods: { reversedMessage: function () { return this.message.split('').reverse().join('') } }
Copy after login
We can define the same function as a method instead of a computed property. The end result is indeed exactly the same both ways. However, the difference is that computed properties are cached based on their dependencies. A computed property is only re-evaluated when its associated dependencies change. This means that as long as the message has not changed, multiple accesses to the reversedMessage calculated property will immediately return the previous calculated result without having to execute the function again.

This also means that the calculated property below will no longer be updated, because Date.now() is not a reactive dependency

computed: { now: function () { return Date.now() } }
Copy after login
In contrast, whenever a re-render is triggered, calling The method will always execute the function again.

Why do we need caching?

Suppose we have a computational attribute A that has a relatively large performance overhead. It needs to traverse a huge array and do a lot of calculations. Then we might have other computed properties that depend on A . Without caching, we would inevitably execute A's getter multiple times! If you don't want caching, use methods instead.

3. Computed properties vs listening properties

Vue provides a more general way to observe and respond to data on Vue instances Changed: Listening properties. When you have some data that needs to change as

otherdata changes, it's easy to abuse watches - especially if you've usedAngularJSbefore. However, it is often better to use computed properties instead of imperative watch callbacks.

Think about this example

{{ 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 } } })
Copy after login
The above code is imperative and repetitive. Compare it to the computed property version:

var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } } })
Copy after login
Isn’t it much better.

4. Computed property setters

Computed properties only have getters by default, but you can also provide a setter when needed

// ... 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] } } } // ...
Copy after login

现在再运行 vm.fullName = 'John Doe' 时,setter 会被调用,vm.firstName 和 vm.lastName 也会相应地被更新。

五、侦听器

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

例如:

Ask a yes/no question:

{{ answer }}

Copy after login

结果:当没有输入?号,那么显示如下:

当有?时候会输出“yes”或者“no”

具体案例效果地址:侦听器

在这个示例中,使用 watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

vue个人信息查看与密码修改如何实现

JS中常出现哪些BUG和错误

The above is the detailed content of Detailed explanation of Vue.js calculation and use of listener properties. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!