1.在插值表达式中使用过滤器 (全局过滤器)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 引入vuejs框架 -->
<script src="./lib/vue-2.4.0.js"></script>
<style>
[v-cloak]{
display : none;
}
</style>
</head>
<body>
<div id="app">
<!--这种过滤器仅仅只能在插值表达式中使用 -->
<p v-cloak>{{str1 | toUpCase1}}</p>
<!--这种使用方法不行 -->
<!-- <input type="text" v-model="str1 | toUpCase1"/> -->
</div>
<script>
<!--核心代码 toUpCase1自定义参数名,第二个参数是函数 -->
Vue.filter("toUpCase1", function(value){
value=value.toUpperCase();
return value;
})
var vm = new Vue({
el : "#app", //el元素表现的是要指定为哪个标签进行相应的vuejs的操作
data : { //data是vuejs中对于数据的表达,数据约定俗成的都是以json的形式来呈现的
//data属性中,存放的是el中要使用到的数据
//这里的data就是MVVM中M,专门用来表现数据的组件
"str1" : "aaaa",
"str2" : "HelloWorld2"
}
});
</script>
</body>
</html>
2.字符串格式化(以时间格式化为例)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 引入vuejs框架 -->
<script src="./lib/vue-2.4.0.js"></script>
<style>
[v-cloak]{
display : none;
}
</style>
</head>
<body>
<div id="app">
<!--这种过滤器仅仅只能在插值表达式中使用 -->
<p v-cloak>{{str1 | dataTimeManager}}</p>
<!--这种使用方法不行 -->
<!-- <input type="text" v-model="str1 | toUpCase1"/> -->
</div>
<script>
Vue.filter("dataTimeManager", function(dataTime){
var y= dataTime.getFullYear();
var m= parseInt(dataTime.getMonth())+1+""; //月份都是从 0开始的。 浏览器支持方面考虑,日期先转换一下称Int再计算
m= m.toString().padStart(2,"0"); //位数不足的话补0处理。 padStart
var d= dataTime.getDate();
d=d.toString().padStart(2,"0");
var h= dataTime.getHours();
h=h.toString().padStart(2,"0");
var mm=dataTime.getMinutes();
mm=mm.toString().padStart(2,"0");
var s=dataTime.getSeconds();
second=s.toString().padStart(2,"0");
// return y+"-"+m+"-"+d; 这种是字符串拼接形式 ES6之前写法
return `${y}-${m}-${d} ${h}:${mm}:${second}`; //这种是新时代写法。
})
var vm = new Vue({
el : "#app", //el元素表现的是要指定为哪个标签进行相应的vuejs的操作
data : { //data是vuejs中对于数据的表达,数据约定俗成的都是以json的形式来呈现的
//data属性中,存放的是el中要使用到的数据
//这里的data就是MVVM中M,专门用来表现数据的组件
"str1" : new Date(),
"str2" : "HelloWorld2"
}
});
</script>
</body>
</html>
3.打折促销:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 引入vuejs框架 -->
<script src="./lib/vue-2.4.0.js"></script>
<style>
[v-cloak]{
display : none;
}
</style>
</head>
<body>
<div id="app">
<!--这种过滤器仅仅只能在插值表达式中使用 -->
<p v-cloak v-for="f in fruitList" :key="f.id">
{{f.id}} ----- {{f.price | discount}} <!--1 ----- 2.4800000000000004 --> <!--2 ----- 8.16 -->
</p>
<!--这种使用方法不行 -->
<!-- <input type="text" v-model="str1 | toUpCase1"/> -->
</div>
<script>
Vue.filter("discount", function(value){
return value * 0.8;
})
var vm = new Vue({
el : "#app", //el元素表现的是要指定为哪个标签进行相应的vuejs的操作
data : { //data是vuejs中对于数据的表达,数据约定俗成的都是以json的形式来呈现的
//data属性中,存放的是el中要使用到的数据
//这里的data就是MVVM中M,专门用来表现数据的组件
"fruitList" : [
{id: "1",name : "苹果",price : "3.1"},
{id: "2",name : "香蕉",price :"10.2"}
],
"str2" : "HelloW orld2"
}
});
</script>
</body>
</html>
局部过滤器:(私有过滤器)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 引入vuejs框架 -->
<script src="./lib/vue-2.4.0.js"></script>
<style>
[v-cloak]{
display : none;
}
</style>
</head>
<body>
<div id="app">
<!--这种过滤器仅仅只能在插值表达式中使用 -->
<p v-cloak v-for="f in fruitList" :key="f.id">
{{f.id}} ----- {{f.price | discount}} <!--1 ----- 2.4800000000000004 --> <!--2 ----- 8.16 -->
</p>
<!--这种使用方法不行 -->
<!-- <input type="text" v-model="str1 | toUpCase1"/> -->
<!--私有过滤器 -->
<p >
{{str2 | filter3 }}
</p>
</div>
<script>
Vue.filter("discount", function(value){
return value * 0.8;
})
var vm = new Vue({
el : "#app", //el元素表现的是要指定为哪个标签进行相应的vuejs的操作
data : { //data是vuejs中对于数据的表达,数据约定俗成的都是以json的形式来呈现的
//data属性中,存放的是el中要使用到的数据
//这里的data就是MVVM中M,专门用来表现数据的组件
"fruitList" : [
{id: "1",name : "苹果",price : "3.1"},
{id: "2",name : "香蕉",price :"10.2"}
],
"str2" : "HelloW orld2"
},
filters : {
filter3 : function(value){
return value + " bbb" ;
}
}
});
</script>
</body>
</html>
两个区域:
**
指令
**
自定义全局指令:
案例1: 页面加载完毕之后文本框自动获取焦点。
解决办法:
结论:
全局指令动态赋值:
自定义私有属性:
以下引用:
效果:
**
VueJs生命周期:
**
第一步:创建阶段:
第二步: 对象运行阶段:
第三步: 对象销毁阶段
生命周期函数测试:
测试结果分析: