Vue.js 允許你自定義過濾器,**可被用作一些常見的文本格式化**。過濾器可以用在兩個地方:**mustache 插值和 v-bind 表達式**。過濾器應該被添加在 JavaScript 表達式的尾部,由“管道”符指示;
## **1. 私有過濾器**
> 私有過濾器只能在當前的vue實例中使用
1. 使用管道符將要格式化的字符,作為第一個參數傳入dataFormat過濾器中
~~~
<td>{{ item.ctime | dataFormat('yyyy-mm-dd')}}</td>
~~~
2.vue實例中定義過濾器
~~~
filters: { // 私有局部過濾器,只能在 當前 VM 對象所控制的 View 區域進行使用
dataFormat(input, pattern = "") { // 在參數列表中 通過 pattern="" 來指定形參默認值,防止報錯
alert(input);
var dt = new Date(input);
// 獲取年月日
var y = dt.getFullYear();
var m = (dt.getMonth() + 1).toString().padStart(2, '0');
var d = dt.getDate().toString().padStart(2, '0');
// 如果 傳遞進來的字符串類型,轉為小寫之后,等于 yyyy-mm-dd,那么就返回 年-月-日
// 否則,就返回 年-月-日 時:分:秒
if (pattern.toLowerCase() === 'yyyy-mm-dd') {
return `${y}-${m}-${d}`;
} else {
// 獲取時分秒
var hh = dt.getHours().toString().padStart(2, '0');
var mm = dt.getMinutes().toString().padStart(2, '0');
var ss = dt.getSeconds().toString().padStart(2, '0');
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
}
}
}
~~~
## 2. 全局過濾器
所謂的全局過濾器,就是所有的VM實例都共享的
~~~
// 全局的過濾器, 進行時間的格式化
// 所謂的全局過濾器,就是所有的VM實例都共享的
Vue.filter('dateFormat', function (dateStr, pattern = "") {
// 根據給定的時間字符串,得到特定的時間
var dt = new Date(dateStr)
// yyyy-mm-dd
var y = dt.getFullYear()
var m = dt.getMonth() + 1
var d = dt.getDate()
// return y + '-' + m + '-' + d
if (pattern.toLowerCase() === 'yyyy-mm-dd') {
return `${y}-${m}-${d}`
} else {
var hh = dt.getHours()
var mm = dt.getMinutes()
var ss = dt.getSeconds()
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
})
~~~
注意:當有局部和全局兩個名稱相同的過濾器時候,會以就近原則進行調用,即:局部過濾器優先于全局過濾器被調用!
## 案例
~~~
<body>
<div id="app">
<p>{{ msg | msgFormat('瘋狂+1', '123') | test }}</p>
</div>
<script>
// 定義一個 Vue 全局的過濾器,名字叫做 msgFormat
Vue.filter('msgFormat', function (msg, arg, arg2) {
// 字符串的 replace 方法,第一個參數,除了可寫一個 字符串之外,還可以定義一個正則
return msg.replace(/單純/g, arg + arg2)
})
Vue.filter('test', function (msg) {
return msg + '========'
})
// 創建 Vue 實例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
msg: '曾經,我也是一個單純的少年,單純的我,傻傻的問,誰是世界上最單純的男人'
},
methods: {}
});
</script>
~~~
- vue
- 為什么要學vue
- 數據雙向綁定
- vue指令
- v-bind創建HTML節點屬性
- v-on綁定事件
- v-cloak
- v-text
- v-for和key屬性
- v-if和v-show
- 案例1
- 自定義指令
- vue樣式
- vue生命周期
- vue過濾器
- 自定義鍵盤修飾符
- 跨域請求
- vue組件
- 組件基礎
- 引入vue文件組件
- 引入render函數作為組件
- 兄弟間組件通信
- 組件函數數據傳遞練習
- 路由
- 數據監聽
- webpack
- vue校驗
- vue筆記
- form表單中input前部分默認輸入,切不可修改
- mixins
- 部署到nginx
- scope
- render
- 下載文件
- vue動態組件
- axios
- Promise
- vue進階
- node-vue-webpack搭建
- vue事件
- 插槽
- vuex
- vuex基礎
- vuex命名空間
- HTML遞歸?
- this.$nextTick異步更新dom
- elementui
- table
- 修改element ui樣式
- form
- 優質博客
- vuex state數據與form元素綁定
- es6
- Promise