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. 【C++】位运算实现加减乘除

    #include<iostream> #include<assert.h> using namespace std; // 位运算实现加减乘除 int myAdd(int nu ...

  2. List容器案例

    案例讲解 迭代模式 不暴露集合的内部结构,又让外部访问集合中的数据 package com.day1; public interface Iterator <T>{ public bool ...

  3. 实用的cmd命令

    1.打开iis服务器:inetmgr 2.远程连接:mstsc 3.注册表:regedit.exe

  4. css字体大小单位

    1:px: 这个应该是国内使用较多的单位,意思为像素.因此,其视觉的呈现效果是与分辨率相关的.例如在1024*768分辨率下看12px的字体就比960*640下看到的“小”,其实字体像素未改变,所以觉 ...

  5. hdu 2196【树形dp】

    http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:找出树中每个节点到其它点的最远距离. 题解: 首先这是一棵树,对于节点v来说,它到达其它点的最远距离 ...

  6. React 从零搭建项目 使用 create-react-app脚手架

    一.安装 npm install -g create-react-app 版本校验:create-react-app --version 二.创建项目 create-react-app指令默认调用np ...

  7. oracle函数 lag()和lead()

    [语法] lag(EXPR,<OFFSET>,<DEFAULT>) LEAD(EXPR,<OFFSET>,<DEFAULT>) [功能]表示根据COL1 ...

  8. ROS出现“Couldn't find executable named listener below //home/xxx/catkin_ws/src/mypack”问题

    在执行节点时出现了如下图所示的错误: 错误原因是在路径下找不到可执行的节点文件.但事实是已经对工作空间进行了编译,并且在devel /lib/my_serial_node 中已经生成了可执行文件. 如 ...

  9. vue事件获取事件对象,vue获取事件源,vue event.currentTarget

    js的事件,如点击事件,可以直接用this获取事件对象,而jQuery可以使用$(this)来获取事件对象.vue必须借助事件的 event 对象 的 currentTarget 才能获取事件对象 v ...

  10. 交互式计算和开发环境:IPython