过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。
定义过滤器的方式有两种。
Vue.filter("RMB1", function(v){
//就是来格式化(处理)v这个数据的
if(v==0){
return v
}
return v+"元"
})
使用全局过滤器方法一:在vue对象前面声明
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <p>{{price}}</p> <p>{{price|format}}</p> </div> <script> Vue.filter("format", function(money){ //就是来格式化(处理)money这个数据的 return money.toFixed(2)+"元"; }); var vm = new Vue({ el:"#app", // vm的模板对象 data:{ // vm的数据 price: 8.156333, }, methods:{}, // vm的方法 }); </script> </body> </html>
使用全局过滤器方法二:也可以用外部js文件导入方式,解耦合使用全局过滤器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.min.js"></script> <!--导入全局过滤器--> <script src="fileter.js"></script> </head> <body> <div id="app"> <p>{{price}}</p> <p>{{price|format}}</p> </div> <script> var vm = new Vue({ el:"#app", // vm的模板对象 data:{ // vm的数据 price: 8.156333, }, methods:{}, // vm的方法 }); </script> </body> </html>
filter.js
// 全局过滤器 Vue.filter("format",function(money){ return money.toFixed(2)+"元"; // js中提供了一个toFixed方法可以保留2位小鼠 });
格式:(局部过滤器只在当前vm对象中生效)
var vm = new Vue({ el:"#app", data:{}, filters:{ RMB2:function(value){ if(value==''){ return; }else{ return '¥ '+value; } } } });
局部过滤器使用示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <p>{{price}}</p> <p>{{price|format}}</p> </div> <script> var vm = new Vue({ el:"#app", // vm的模板对象 // 局部过滤器只能在当前vm对象中使用 filters:{ format:function (money) { return "¥" + money.toFixed(2); } }, data:{ // vm的数据 price: 8.156333, }, methods:{}, // vm的方法 }); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <input type="text" v-model="num1">+ <input type="text" v-model="num2">=<span>{{total}}</span> </div> <script> var vm = new Vue({ el:"#app", // vm的模板对象 data:{ // vm的数据 num1: 0, num2: 0, }, methods:{}, // vm的方法 computed:{ //计算属性:相当于创建一个新的变量保存数据计算的结果,里面的函数都必须有返回值 total: function(){ // total是计算属性中的方法名,是上面标签内使用的文本 // parseFloat 把数据转换成float类型 // parseInt 把数据转换成int类型 var ret = parseFloat(this.num1) + parseFloat(this.num2); // var ret = Number(this.num1) + Number(this.num2); // 转换成数字Number return ret } } }); </script> </body> </html>
侦听属性,可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作。
侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,这个函数在被调用时,vue会传入两个形参,第一个是变化前的数据值,第二个是变化后的数据值。
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <button @click="num++">赞({{num}})</button> </div> <script> var vm = new Vue({ el:"#app", // vm的模板对象 data:{ // vm的数据 num: 0, }, methods:{}, // vm的方法 watch:{ // 监听属性,监听指定变量的值是否发生变化,当发生变化时调用对应的方法 num:function(newval,oldval){ // 两个参数,newval新的值,oldval旧的值 //num发生变化的时候,要执行的代码 // console.log(this.num,"修改后num="+newval,"修改前num="+oldval); if(this.num>=5){ this.num=5; } console.log(this.num,"修改后num="+newval,"修改前num="+oldval); } } }); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>局部过滤器</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <p @click="num++">{{num}}</p> </div> <script> var vm = new Vue({ el:"#app", data:{ num: 10, }, beforeCreate(){ console.log("----vm对象初始化完成之前自动执行的代码----"); console.log(this.$el); console.log(this.$data); }, created(){ // 这里主要实现到服务端获取页面数据[ajax] console.log("----vm对象初始化完成以后自动执行的代码----"); console.log(this.$el); // 没有查找到vm需要控制的元素 console.log(this.$data); // 已经把data模型中的数据注入到vm对象里面作为属性了 }, beforeMount(){ console.log("----vm数据渲染到html模板之前执行的代码----"); console.log(this.$el); // 没有查找到vm需要控制的元素,vm对象尚未把data数据显示到页面中 }, /* <div > <p @click="num++">{{num}}</p> </div> */ mounted(){ // 修改页面的内容[页面特效] console.log("----vm数据渲染到html模板之后执行的代码----"); console.log(this.$el); // 查找到vm需要控制的元素,vm对象已经把data数据显示到页面中 }, /* <div ><p>10</p></div> */ // beforeUpdate(){ // console.log("----数据更新了,渲染之前执行的代码------"); // console.log(this.num); // console.log(this.$el.innerHTML); // }, // updated(){ // console.log("----数据更新了,渲染之后执行的代码------"); // console.log(this.num); // console.log(this.$el.innerHTML); // }, // 销毁vm对象 vm.$destroy() beforeDestroy(){ console.log("--- 当vm对象被销毁之前,会自动执行这里的代码 ---"); console.log( this ); }, destroyed(){ console.log("--- 当vm对象被销毁以后,会自动执行这里的代码 ---"); } }); </script> </body> </html>
总结:常用created(用于初始化)和mounted(用于修改页面)
在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。
另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created
补充:在浏览器保存信息的方法-localStorage
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>局部过滤器</title> <script src="vue.min.js"></script> </head> <body> <div id="app"> <p @click="num++">{{num}}</p> </div> <script> var vm = new Vue({ el:"#app", data:{ num: 10, }, created(){ // 这里主要实现到服务端获取页面数据[ajax] console.log("----vm对象初始化完成以后自动执行的代码----"); // console.log(this.$el); // 没有查找到vm需要控制的元素 // console.log(this.$data); // 已经把data模型中的数据注入到vm对象里面作为属性了 this.num = localStorage.num; }, // 销毁vm对象 vm.$destroy() beforeDestroy(){ console.log("--- 当vm对象被销毁之前,会自动执行这里的代码 ---"); console.log( this ); localStorage.num = this.num; // localStorage将数据存储到浏览器上的本地仓库 }, }); </script> </body> </html>