vue-learning:19 - js - filters
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的更多相关文章
- Vue教程:过滤器filters(五)
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaScrip ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字
缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...
- vue初学:基础概念
一.vue使用步骤: 1.引包vue.js 2.html中写要操作的DOM节点 3.创建vue对象:new Vue({options}); 4.配置options:el:(要操作的对象,用选择器,同j ...
- vue中config/index.js:配置的详细理解
当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面 (环境变量及其基本变量的配置) var path = require('path') ...
- DCloud-JS-MUI-JS:utils.js
ylbtech-DCloud-JS:utils.js 1. 导航返回返回顶部 1. var oldBack = mui.back; mui.back = function () { mui.back ...
- vue入门:用户管理demo1
该demo由前端请求后台服务器获取数据进行渲染 使用到的技术点 1.使用到的vue指令:{{}} v-if v-for v-model 2.使用到的事件:@click 点击事件, @keyup.ent ...
- vue-learning:22 - js - directives
directives 在讲解视图层指令时,我们讲到ref特性,使用它我们可以获取当前DOM元素对象,以便执行相关操作. <div id="app"> <input ...
- iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果
具体文档和demo可以访问github:https://github.com/zhoushengmufc/iosselect 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的pi ...
- Deep learning:五十一(CNN的反向求导及练习)
前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...
随机推荐
- Directx11教程(16) D3D11管线(5)
原文:Directx11教程(16) D3D11管线(5) 本章我们学习VS中具体做些什么事情? 首先再看看我们的VS shader代码: Clolor.vs - PixelInputType Col ...
- Effective Modern C++:04智能指针
裸指针有着诸多缺点:裸指针的声明中看不出它指向的是单个对象还是数组:裸指针的声明中也无法看出使用完它指向的对象后是否需要删除,也就是声明中看不出裸指针是否拥有其指向的对象:即使知道要析构裸指针指向的对 ...
- 阿里云应用高可用 AHAS 正式商用,可一键提升云上应用可用性
在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战. 7月17日,阿里云应用高可用服务AHAS 正式商用,包含架构感知.流控降 ...
- python之浮点型类型
浮点型:float 如3.14,2.88 class float(object): """ float(x) -> floating point number Co ...
- mysql操作手册2
6 rows in set (0.00 sec) # 我们再把 table 的位置交换一下,再用 right join 试试 select a.id,a.name,b.dept_id fr ...
- Android实战:手把手实现“捧腹网”APP(三)-----UI实现,逻辑实现
Android实战:手把手实现"捧腹网"APP(一)-–捧腹网网页分析.数据获取 Android实战:手把手实现"捧腹网"APP(二)-–捧腹APP原型设计.实 ...
- MySQL的安装问题总结--终极解决方案
MySQL安装 选择:custom 自定义 更改路径 安装到其他盘 选择:launch configuration finish 进行配置 如果忘记选择 找 "E:\Program Fil ...
- 原生js复习1.0
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- python 列表索引
- Python基础:03序列:字符串、列表和元组
一:序列 1:连接操作符(+) 这个操作符允许把一个序列和另一个相同类型的序列做连接,生成新的序列.语法如下:sequence1 + sequence2 该表达式的结果是一个包含sequence1和s ...