Vue.js基础-05-Vue的常用选项-01-计算选项(computed)、方法选项(methods)、过滤器(filters)

1. computed(计算选项)

语法示例

  • 引用
<p>计算回文: {{ reversedMessage }}</p>
  • 定义
computed: {
  // 计算属性的 getter
  reversedMessage: function () {
    // `this` 指向 vm 实例
    return this.message.split('').reverse().join('')
  }
}

完整示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW SONG</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>原文字串: {{ message }}</p>
    <p>计算回文: {{ reversedMessage }}</p>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: '鸦啼正落花'
      },
      computed: {
        reversedMessage: function () {
          return this.message.split('').reverse().join('')
        }
      }
    })
  </script>
</body>

</html>
  • 输出
原文: 鸦啼正落花

回文: 花落正啼鸦

完整示例(修改data中的值)

data 中定义message 值为 “花落正啼鸦”.
conputer中包含get和set两个get特然。get 返回message值;set接收新值,重写设置data中数据。
结果打印 1)get的返回值 2)data中message值

  • 代码
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>{{ reversedMessage }}</p>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: '花落正啼鸦',
      },
      computed: {
        reversedMessage: {
          get: function () {
            return "get: " + this.message
          },
          set: function (newValue) {
            this.message = newValue
          }
        }
      }
    })
    vm.reversedMessage = '袖罗垂影瘦';
    document.write('data: ' + vm.message);

  </script>
</body>

</html>
  • 输出

如下可见,get中的输出变了,打印data中的message值也变了。

在这里插入图片描述

2. methods(方法选项)

语法示例

  • 引用
<p>方法回文: {{ reversedMessage() }}</p>
  • 定义
computed: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

完整示例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>原始字串: {{ message }}</p>
    <p>方法回文: {{ reversedMessage() }}</p>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: '鸦啼正落花'
      },
      methods: {
        reversedMessage: function () {
          return this.message.split('').reverse().join('')
        }
      }
    })
  </script>
</body>

</html>

N. 比较 computed & methods

不同点

  • computed: 只有相关依赖发生改变时才会重新取值
  • methods: 在重新渲染的时候,函数总会重新调用执行

完整示例

为了看到computed的缓存效果,我们将两个方法多次打印,并且每次打印的时候加上一个计数值。
如果是缓存,那么计数值不会变化。
如果重新调用,那么计数值会增加。

  • 代码
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW-宋</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    <p>原始字串: {{ message }}</p>
    <p>===============计算回文================</p>
    <p>计算回文: {{ reversedMessage }}</p>
    <p>计算回文: {{ reversedMessage }}</p>
    <p>计算回文: {{ reversedMessage }}</p>
    <p>===============方法回文================</p>
    <p>方法回文: {{ reversedMessage2() }}</p>
    <p>方法回文: {{ reversedMessage2() }}</p>
    <p>方法回文: {{ reversedMessage2() }}</p>
  </div>

  <script>
    var cut = 1
    var vm = new Vue({
      el: '#app',
      data: {
        message: '鸦啼正落花'
      },
      computed: {
        reversedMessage: function () {
          cut += 1
          return cut + ":" + this.message.split('').reverse().join('')
        }
      },
      methods: {
        reversedMessage2: function () {
          cut += 1
          return cut + ":" + this.message.split('').reverse().join('')
        }
      }
    })
  </script>
</body>

</html>
  • 结果显示
    在这里插入图片描述

3. 过滤器

语法示例

定义过滤器

    new Vue({
      ……
      filters: {
      }
    })

使用过滤器

将数据用管道符传到后边的表达式中,有如下两种方式:

  • 两个大括号
{{ message | 过滤器名 }}
  • 在v-bind中使用
<div v-bind:id="rawId | formatId"></div>

完整示例

如下,message 的值通过管道符传给 capitalize。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>CROW SONG</title>
  <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>

<body>
  <div id="app">
    {{ message | capitalize }}
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        message: 'guanyu'
      },
      filters: {
        capitalize: function (value) {
          if (!value) return ''
          value = value.toString()
          return value.charAt(0).toUpperCase() + value.slice(1)
        }
      }
    })
  </script>
</body>

</html>

使用示例(过滤器串联)

{{ message | filterA | filterB }}

使用示例( 过滤器传参)

{{ message | filterA('arg1', arg2) }}

说明:

  • filterA的第一个参数: message
  • filterA的第二个参数: 字串 arg1
  • filterA的第三个参数: 变量 arg2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是TodoMVC-vue.jsjs文件: ```javascript /*global Vue, todoStorage */ (function (exports) { 'use strict'; // 定义过滤器 var filters = { all: function (todos) { return todos; }, active: function (todos) { return todos.filter(function (todo) { return !todo.completed; }); }, completed: function (todos) { return todos.filter(function (todo) { return todo.completed; }); } }; // TodoMVC 应用程序 var app = new Vue({ // 应用程序绑定的根元素 el: '.todoapp', // 应用程序的数据 data: { todos: todoStorage.fetch(), newTodo: '', editedTodo: null, visibility: 'all' }, // 计算属性 computed: { filteredTodos: function () { return filters[this.visibility](this.todos); }, remaining: function () { return filters.active(this.todos).length; }, allDone: { get: function () { return this.remaining === 0; }, set: function (value) { this.todos.forEach(function (todo) { todo.completed = value; }); } } }, // 观察者 watch: { todos: { deep: true, handler: todoStorage.save } }, // 方法 methods: { addTodo: function () { var value = this.newTodo && this.newTodo.trim(); if (!value) { return; } this.todos.push({ title: value, completed: false }); this.newTodo = ''; }, removeTodo: function (todo) { this.todos.splice(this.todos.indexOf(todo), 1); }, editTodo: function (todo) { this.beforeEditCache = todo.title; this.editedTodo = todo; }, doneEdit: function (todo) { if (!this.editedTodo) { return; } this.editedTodo = null; todo.title = todo.title.trim(); if (!todo.title) { this.removeTodo(todo); } }, cancelEdit: function (todo) { this.editedTodo = null; todo.title = this.beforeEditCache; }, removeCompleted: function () { this.todos = filters.active(this.todos); } }, // 自定义指令 directives: { 'todo-focus': function (el, binding) { if (binding.value) { el.focus(); } } } }); // 应用程序启动后,将输入框聚焦 app.$nextTick(function () { app.newTodo = ''; }); exports.app = app; })(window); ``` 这是一个使用了Vue.js框架的TodoMVC应用程序的JavaScript文件。其中定义了一些过滤器计算属性、观察者、方法和自定义指令,用于实现TodoMVC应用程序的各种功能,比如添加、删除、编辑、筛选和保存待办事项等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值