filters

  • 基本使用

    • 仅限在插值{{}}v-bind指令中使用
    • 管道符|分隔
    • 链式调用
    • 传入参数
  • 全局注册和局部注册
  • 纯函数性质(不能使用this

基本使用

我们看下之前用计算属性实现的例子,用过滤器实现

<!-- 假设后端返回的价格单位是分,显示格式要求¥0.00元 -->
<!-- expression -->
<div>price:¥ {{ (price / 100).toFixed(2) }}元</div>
<!-- computed -->
<div>price: {{ total }}</div> <!-- filter -->
<div>price: {{ price | formatPrice1 }}</div>
<!-- filter with argument -->
<div>price: {{ price | formatPrice2('¥') }}</div>
<!-- filter by chain call -->
<div>price: {{ price | formatPrice3 | symbolType('¥') }}</div>
new Vue({
el: "#app",
data: {
price: 100,
memorySetterList: [],
},
computed: {
total() {
return `¥ ${(this.price / 100).toFixed(2)}元`
}
},
filters: {
formatPrice1(price) {
return `¥ ${(this.price / 100).toFixed(2)}元`
},
formatPrice2(price,symbol) {
return `${{symbol}} ${(this.price / 100).toFixed(2)}元`
},
formatPrice3(price) {
return `${(this.price / 100).toFixed(2)}`
},
symbolType(price,symbol) {
var list = new Map([
['¥','元'],
['$','美元'],
['€','欧元']
])
return symbol + price + list.get(symbol)
}
}})

过滤器为我们格式化文本提供了更便捷的方法。并且price | filter比在表达式中直接写total更具可读性和扩展性。

过滤器总是将前一个值作为第一个参数传入,自定义参数从第二个开始。使用过滤器需要注意两个事项:

  • 不能使用this来访问其它数据或方法。

    这一点是故意设计成这样的,因为过滤器必须是纯函数。也就是说不管在哪里使用,同样的输入应该保证同样的输出。如果需要使用外部数据,可以作为参数传入。
  • 只能在插值{{ }}和指令v-bind中使用

    vue 1的版本可以任何可以使用表达式的地方使用,但是vue 2中取消了这种做法,并用v-bind的使用也是在vue 2.1.0中添加的。

过滤器注册

之前在vue作用域讲过,分全局作用域vue,实例作用域vm=new Vue(),组件作用域。

根据过滤器的使用范围过分别选择。

// 全局注册,可以在任何实例内或组件内使用
Vue.filter('filterName', function (value, arg) {
// do something
}) // 实例注册,通过配置对象options属性传入
var vm = new Vue({
el: "#app",
data: {
price: 10000
},
filters: {
filterName(value,arg) {
// do something
},
}
}) // 组件内注册,只限组件内使用,其它组件无法使用
export default {
data() {
return {
price: 10000
}
},
filters: {
filterName(value,arg) {
// do something
},
}
}

文件组织

一般我们使用过滤器,也就是因为有频繁操作,所以在项目中一般过滤器都是全局注册。在项目src文件中定义一个filters文件夹,新建一个index.js

import Vue from 'vue'

var filter1 = function (value, arg) { /* do something */ }
var filter2 = function (value, arg) { /* do something */ }
var filter3 = function (value, arg) { /* do something */ } var filters = {
filter1,
filter2,
filter3,
} for (filter in filters) {
Vue.filter(filter, filters[filter])
} export default Vue
// 在main.js文件导入
import './filters/install'

vue-learning:19 - js - filters的更多相关文章

  1. Vue教程:过滤器filters(五)

    Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaScrip ...

  2. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字

    缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...

  3. vue初学:基础概念

    一.vue使用步骤: 1.引包vue.js 2.html中写要操作的DOM节点 3.创建vue对象:new Vue({options}); 4.配置options:el:(要操作的对象,用选择器,同j ...

  4. vue中config/index.js:配置的详细理解

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) var path = require('path') ...

  5. DCloud-JS-MUI-JS:utils.js

    ylbtech-DCloud-JS:utils.js 1. 导航返回返回顶部 1. var oldBack = mui.back; mui.back = function () { mui.back ...

  6. vue入门:用户管理demo1

    该demo由前端请求后台服务器获取数据进行渲染 使用到的技术点 1.使用到的vue指令:{{}} v-if v-for v-model 2.使用到的事件:@click 点击事件, @keyup.ent ...

  7. vue-learning:22 - js - directives

    directives 在讲解视图层指令时,我们讲到ref特性,使用它我们可以获取当前DOM元素对象,以便执行相关操作. <div id="app"> <input ...

  8. iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果

    具体文档和demo可以访问github:https://github.com/zhoushengmufc/iosselect 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的pi ...

  9. Deep learning:五十一(CNN的反向求导及练习)

    前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...

随机推荐

  1. Directx教程(30) 如何保证渲染物体不会变形

    原文:Directx教程(30) 如何保证渲染物体不会变形      在Directx11教程(6)中, 我们曾经实现过这个功能,但那时是在SystemClass中,处理WM_SIZE时候,重新调用m ...

  2. Python中if __name__ == '__main__':理解

    在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...

  3. Hibernate中的配置对象

    数据库连接:由 Hibernate 支持的一个或多个配置文件处理.这些文件是 hibernate.properties 和 hibernate.cfg.xml. 类映射设置:这个组件创造了 Java ...

  4. 容器云平台使用体验:数人云Crane(续)

    数人云在9月6日开通了容器管理面板Crane的试用活动,这是国内首个基于DockerSwarmKit的容器管理工具.它具有Docker原生编排功能,采用轻量化架构,帮助开发者快速搭建DevOps环境, ...

  5. 寻找第K大数的方法总结

    http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html

  6. Java练习 SDUT-2733_小鑫の日常系列故事(二)——石头剪子布

    小鑫の日常系列故事(二)--石头剪子布 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 小鑫在上幼儿园的时候,喜欢跟小伙 ...

  7. HDU_1061:Rightmost Digit

    Problem Description Given a positive integer N, you should output the most right digit of N^N.   Inp ...

  8. TextView.setTextColor(int); 括号里那个颜色int值的理解

    原本以为是R.id里的东西,后来发现不是 http://dianhua1990627.blog.163.com/blog/static/2755558820132262150387/

  9. 关于 KiCad 画圆弧走线

    关于 KiCad 画圆弧走线 有很多关于 关于 KiCad 画圆弧走线的帖子. 最新进展是 V6 在开发中. 但是因为关于 DRC 问题,开发好像有难度. https://bugs.launchpad ...

  10. Istio on ACK集成生态(1): 集成TSDB助力可观测性存储

    阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...