Vue.js 允许自定义过滤器,一般可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
1
2
3
4
5
|
<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 v-bind 中 -->
<
div
v-bind:id
=
"rawId | formatId"
></
div
>
|
可以在一个组件的选项中定义私有的过滤器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
filters: {
dateFormat: (dataStr) => {
var
time =
new
Date(dataStr);
function
timeAdd0(str) {
if
(str < 10) {
str =
'0'
+ str;
}
return
str
}
var
y = time.getFullYear();
var
m = time.getMonth() + 1;
var
d = time.getDate();
var
h = time.getHours();
var
mm = time.getMinutes();
var
s = time.getSeconds();
return
y +
'-'
+ timeAdd0(m) +
'-'
+ timeAdd0(d) +
' '
+ timeAdd0(h) +
':'
+ timeAdd0(mm) +
':'
+ timeAdd0(s);
}
}
|
或者在创建 Vue 实例之前全局定义过滤器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Vue.filter(
'dateFormat'
, (dataStr) => {
var
time =
new
Date(dataStr);
function
timeAdd0(str) {
if
(str < 10) {
str =
'0'
+ str;
}
return
str
}
var
y = time.getFullYear();
var
m = time.getMonth() + 1;
var
d = time.getDate();
var
h = time.getHours();
var
mm = time.getMinutes();
var
s = time.getSeconds();
return
y +
'-'
+ timeAdd0(m) +
'-'
+ timeAdd0(d) +
' '
+ timeAdd0(h) +
':'
+ timeAdd0(mm) +
':'
+ timeAdd0(s);
})
|
但是如果想要在v-model或者v-text中使用过滤器是不生效的,可以参考以下写法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<template>
<div id=
"app"
>
<input type=
"text"
v-model=
"userDate"
/>
<span>{{ userDate | dateFormat }}</span>
</div>
</template>
<script>
export
default
{
data: {
return
{
userDate:
''
,
}
},
filters: {
dateFormat: (dataStr) => {
var
time =
new
Date(dataStr);
function
timeAdd0(str) {
if
(str < 10) {
str =
'0'
+ str;
}
return
str
}
var
y = time.getFullYear();
var
m = time.getMonth() + 1;
var
d = time.getDate();
var
h = time.getHours();
var
mm = time.getMinutes();
var
s = time.getSeconds();
return
y +
'-'
+ timeAdd0(m) +
'-'
+ timeAdd0(d) +
' '
+ timeAdd0(h) +
':'
+ timeAdd0(mm) +
':'
+ timeAdd0(s);
}
}
}
</script>
<style>
</style>
|