Vuejs教程-Vue.js的Watcher或watch属性允许开发者监听组件的数据,并在特定属性发生变化时运行相应的函数。Watcher或watch属性是Vue.js的一个独特功能,它允许你观察组件状态的某个属性,并在该属性的值发生变化时运行函数。

让我们通过一个例子来了解和学习Vue.js中的Watch属性。请参考以下示例以理解Watcher或watch属性的概念。

Index.html文件:

<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Watch Property</title>
  <link rel="stylesheet" href="index.css">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="wat_pro">
    Kilometers: <input type="text" v-model="kilometers"><br>
    Meters: <input type="text" v-model="meters">
  </div>
  <script src="index.js"></script>
</body>
</html>

Index.js文件:

var vm = new Vue({
  el: '#wat_pro',
  data: {
    kilometers: 0,
    meters: 0
  },
  methods: {},
  computed: {},
  watch: {
    kilometers: function (val) {
      this.kilometers = val;
      this.meters = val * 1000;
    },
    meters: function (val) {
      this.kilometers = val / 1000;
      this.meters = val;
    }
  }
});

让我们使用一个简单的CSS文件使输出更具吸引力。

Index.css文件:

html, body {
  margin: 5px;
  padding: 0;
}

执行程序后,将会看到以下输出:

输出:

1.png

你可以看到输出中的文本框都有0的输入。如果你在"Kilometers"文本框中输入一些值,你会看到"Meters"文本框中的值发生变化,反之亦然。让我们在"Kilometers"文本框中输入50,并查看输出。

输出:

2.png

现在,输入一些值在"Meters"文本框中,并查看"Kilometers"文本框中的变化。让我们在"Meters"文本框中输入5,并查看输出。

输出:

3.png

示例解释

在上面的示例中,我们创建了两个文本框,一个用于表示"Kilometers",另一个用于表示"Meters"。我们在data属性中初始化了这两个文本框的值为0。这里,我们创建了一个watch对象,并为它定义了两个函数:kilometers和meters。在这两个函数中,分别进行了从"Kilometers"到"Meters"的转换和从"Meters"到"Kilometers"的转换。

当你在任何一个文本框中输入值时,无论哪个文本框的值发生变化,Watch属性都会负责更新两个文本框的值。你无需分配任何事件或等待它改变,并做额外的验证工作。Watch属性会负责根据各自函数中的计算来更新文本框的值。

Vue.js计算属性与Watched属性的比较

如果你比较Vue.js的计算属性和Vue.js的Watch属性,那么Vue.js的Watch属性提供了一种更通用的方式来观察和响应数据的变化。

如果你有一些数据需要基于其他数据进行更改,使用Watch属性是很容易且直观的,特别是如果你来自AngularJS的背景。但是,最好使用计算属性而不是命令式的watch回调。

让我们用一个例子来比较它们,分别使用Watch属性和计算属性来实现相同的功能。

Index.html文件:

<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Watch Property</title>
  <link rel="stylesheet" href="index.css">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="eg_1">{{ fullName }}</div>
  <script src="index.js"></script>
</body>
</html>

Index.js文件:

var vm = new Vue({
  el: '#eg_1',
  data: {
    firstName: 'Alex',
    lastName: 'Panda',
    fullName: 'Alex Panda'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName;
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val;
    }
  }
});

输出:

4.png

你可以看到以上代码是命令式且重复的。现在,让我们与计算属性的例子进行比较:

Index.html文件:

<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Computed Property</title>
  <link rel="stylesheet" href="index.css">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="eg_2">{{ fullName }}</div>
  <script src="index.js"></script>
</body>
</html>

Index.js文件:

var vm = new Vue({
  el: '#eg_2',
  data: {
    firstName: 'Alex',
    lastName: 'Panda'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName;
    }
  }
});

输出:

5.png

你可以看到这两个例子都得到了相同的结果,但第二个例子,即"计算属性"的例子更好且更简洁。

标签: vue, vuejs, vue框架, vue教程, vue学习, vue入门, vue入门教程, vue进阶, vue开发, vue框架使用, vue框架教程, vue框架编程, vue框架学习, vue框架进阶, vue框架学习教程