computed

用于处理一些复杂逻辑

实例-反转字符

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Vue计算属性</title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>原始: {{ message }}</p>
  11. <p>反转: {{ reversedMessage }}</p>
  12. </div>
  13. <script>
  14. var vm = new Vue({
  15. el: "#app",
  16. data: {
  17. message: "谁啊,咋了!咋了,谁啊",
  18. },
  19. computed: {
  20. // 计算属性的 getter
  21. reversedMessage: function () {
  22. // `this` 指向 vm 实例
  23. return this.message.split("").reverse().join("");
  24. },
  25. },
  26. });
  27. </script>
  28. </body>
  29. </html>

computed 对比 methods

两者效果一样,但computed基于它的依赖缓存,只有相关依赖发生改变才会重新取值。 而使用methods,在重新渲染的时候,函数会重新调用。 可以说computed性能会更好,但是,如果不希望使用缓存,可以使用methods属性。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
  6. <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>原始: {{ message }}</p>
  11. <p>计算: {{ reversedMessage }}</p>
  12. <p>方法: {{ reversedMessage2() }}</p>
  13. </div>
  14. <script>
  15. var vm = new Vue({
  16. el: "#app",
  17. data: {
  18. message: "www.4399.com",
  19. },
  20. computed: {
  21. // 计算属性的 getter
  22. reversedMessage: function () {
  23. // `this` 指向 vm 实例
  24. return this.message.split("").reverse().join("");
  25. },
  26. },
  27. methods: {
  28. reversedMessage2: function () {
  29. return this.message.split("").reverse().join("");
  30. },
  31. },
  32. });
  33. </script>
  34. </body>
  35. </html>

计算属性的 setter

计算属性默认只有getter,不过在需要的时候也可以提供一个setter

实例1

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
  6. <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>{{ site }}</p>
  11. </div>
  12. <script>
  13. var vm = new Vue({
  14. el: "#app",
  15. data: {
  16. name: "Google",
  17. url: "http://www.google.com",
  18. },
  19. computed: {
  20. site: {
  21. // getter
  22. get: function () {
  23. return this.name + " " + this.url;
  24. },
  25. // setter
  26. set: function (newValue) {
  27. var names = newValue.split(" ");
  28. this.name = names[0];
  29. this.url = names[names.length - 1];
  30. },
  31. },
  32. },
  33. });
  34. // 调用 setter, vm.name 和 vm.url 也会被对应更新
  35. vm.site = "猪脚饭 http://www.runoob.com";
  36. document.write("name: " + vm.name);
  37. document.write("<br>");
  38. document.write("url: " + vm.url);
  39. </script>
  40. </body>
  41. </html>

实例2

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>计算属性的setter和getter</title>
  6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">{{ fullName }}</div>
  10. <script>
  11. var vm = new Vue({
  12. el: "#app",
  13. data: {
  14. firstName: "Alex",
  15. lastName: "Xu",
  16. },
  17. computed: {
  18. fullName: {
  19. get: function () {
  20. return this.firstName + " " + this.lastName;
  21. },
  22. set: function (value) {
  23. var arr = value.split(" ");
  24. this.firstName = arr[0];
  25. this.lastName = arr[1];
  26. },
  27. },
  28. },
  29. });
  30. // vm.firstName="八嘎"
  31. </script>
  32. </body>
  33. </html>