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中的参数必须已提前学习好.而本文 ...
随机推荐
- SPSS函数之期和时间函数
SPSS函数之期和时间函数 CTIME.DAYS(timevalue)数值.返回 timevalue 中的天数(包括有小数位的天数),timevalue 必须为时间格式的数值或表达式,如 TIME.x ...
- Flask第一篇
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- BZOJ1085 luogu2324骑士精神题解
没有什么特别好的办法,只好用搜索去做 因为一次移动最多归位一个骑士 所以可以想到用IDA*,为了简化状态 我们用k,x,y,sum来表示移动了k步,空格在x,y,还用sum个没有归位的情况 然后枚举转 ...
- @NOIP2018 - D1T2@ 货币系统
目录 @题目描述@ @题解@ @代码@ @题目描述@ 在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 n.面额 ...
- ArcGIS中的连接和关联表
大多数数据库的设计指导方针都倾向于将数据库组织成多个表 - 每个表关注一个特定的主题 - 而非一个包含所有必要字段的大型表.设置多个表可以避免数据库中的信息发生重复,因为只会将信息在一个表中存储一次. ...
- 2019-8-31-dotnet-通过-WMI-获取系统信息
title author date CreateTime categories dotnet 通过 WMI 获取系统信息 lindexi 2019-08-31 16:55:59 +0800 2019- ...
- Getting started with the basics of programming exercises_1
1.编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替 使用if 结构: #include<stdio.h> #define NONBLANK 'a'; // repal ...
- hadoop2.6.0 + hbase-1.0.0 伪分布配置
1 基本配置 主机名: 192.168.145.154 hadoop2 ======= 2 etc/hadoop下文件配置 1)core-site.xml <configuration> ...
- Laravel 修改默认日志文件名称和位置
修改默认日志位置 我们平常的开发中可能一直把laravel的日志文件放在默认位置不会有什么影响,但如果我们的项目上线时是全量部署,每次部署都是git中最新的代码,那这个时候每次都会清空我们的日志,显示 ...
- 关于浏览器ip代理导致定位错乱问题的坑
http://m.welltrend.com.cn/网站在Android手机的qq浏览器或者uc浏览器或者在微信中打开连接访问时,点击右侧的聊天按钮,经常出现手机在北京结果定位到天津的问题,或者广州的 ...