Vue.js 允許你自定義過濾器,可被用于一些常見的文本格式化。過濾器可以用在兩個地方:**雙花括號插值和 `v-bind` 表達式** (后者從 2.1.0+ 開始支持)。過濾器應該被添加在 JavaScript 表達式的尾部,由“管道”符號指示:
``` html
<!-- 在雙花括號中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
```
你可以在一個組件的選項中定義本地的過濾器:
``` js
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
```
或者在創建 Vue 實例之前全局定義過濾器:
``` js
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
```
下面這個例子用到了 `capitalize` 過濾器:
{% raw %}
<div id="example-1" class="demo">
<input type="text" v-model="message">
<p>{{ message | capitalize }}</p>
</div>
<script>
new Vue({
el: '#example-1',
data: function () {
return {
message: 'john'
}
},
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})
</script>
{% endraw %}
過濾器函數總接收表達式的值 (之前的操作鏈的結果) 作為第一個參數。在上述例子中,`capitalize` 過濾器函數將會收到 `message` 的值作為第一個參數。
過濾器可以串聯:
``` html
{{ message | filterA | filterB }}
```
在這個例子中,`filterA` 被定義為接收單個參數的過濾器函數,表達式 `message` 的值將作為參數傳入到函數中。然后繼續調用同樣被定義為接收單個參數的過濾器函數 `filterB`,將 `filterA` 的結果傳遞到 `filterB` 中。
過濾器是 JavaScript 函數,因此可以接收參數:
``` html
{{ message | filterA('arg1', arg2) }}
```
這里,`filterA` 被定義為接收三個參數的過濾器函數。其中 `message` 的值作為第一個參數,普通字符串 `'arg1'` 作為第二個參數,表達式 `arg2` 的值作為第三個參數。
- 寫在前面
- 基礎
- 安裝
- 介紹
- Vue實例
- 模板語法
- 計算屬性和偵聽器
- Class 與 Style 綁定
- 條件渲染
- 列表渲染
- 事件處理
- 表單輸入綁定
- 組件基礎
- 深入了解組件
- 組件注冊
- Prop
- 自定義事件
- 插槽
- 動態組件 & 異步組件
- 處理邊界情況
- 過渡 & 動畫
- 進入/離開 & 列表過渡
- 狀態過渡
- 可復用性 & 組合
- 混入
- 自定義指令
- 渲染函數 & JSX
- 插件
- 過濾器
- 工具
- 生產環境部署
- 單文件組件
- 單元測試
- TypeScript 支持
- 規模化
- 路由
- 狀態管理
- 服務端渲染
- 內在
- 深入響應式原理
- 遷移
- 從 Vue 1.x 遷移
- 從 Vue Router 0.7.x 遷移
- 從 Vuex 0.6.x 遷移到 1.0
- 更多
- 對比其他框架
- 加入 Vue.js 社區
- 開發團隊