Vue.js 允许自定义过滤器,一般可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
1
2
3
4
5
|
{{ message | capitalize }}
<
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
|
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);
}
}
}
|