• Vue对象提供的属性功能


    3. Vue对象提供的属性功能

    3.1 过滤器

    过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。

    定义过滤器的方式有两种。

    3.1.1 使用Vue.filter()进行全局定义

    Vue.filter("RMB1", function(v){
      	//就是来格式化(处理)v这个数据的
      	if(v==0){
        		return v
      	}
    
      	return v+"元"
    })
    

    3.1.2 在vue对象中通过filters属性来定义

    var vm = new Vue({
      el:"#app",
      data:{},
      filters:{
        RMB2:function(value){
          if(value==''){
            return;
          }else{
          	return '¥ '+value;
          }
        }
    	}
    });
    

    3.4 计算和侦听属性

    3.4.1 计算属性

    我们之前学习过字符串反转,如果直接把反转的代码写在元素中,则会使得其他同事在开发时时不易发现数据被调整了,所以vue提供了一个计算属性(computed),可以让我们把调整data数据的代码存在在该属性中。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.min.js"></script>
    		<script>
    		window.onload = function(){
            var vm = new Vue({
                el:"#app",
                data:{
                    str1: "abcdefgh"
                },
                computed:{   //计算属性:里面的函数都必须有返回值
                    strRevs: function(){
                        var ret = this.str1.split("").reverse().join("");
                        return ret
                    }
                }
            });
        }
        </script>
    </head>
    <body>
        <div id="app">
             <p>{{ str1 }}</p>
             <p>{{ strRevs }}</p>
        </div>
    </body>
    </html>
    

    3.4.2 监听属性

    侦听属性,可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作。

    侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,这个函数在被调用时,vue会传入两个形参,第一个是变化前的数据值,第二个是变化后的数据值。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.min.js"></script>
        <script>
          window.onload = function(){
             var vm = new Vue({
                el:"#app",
                data:{
                    num:20
                },
                watch:{
                    num:function(newval,oldval){
                        //num发生变化的时候,要执行的代码
                        console.log("num已经发生了变化!");
                    }
                }
            })
          }
        </script>
    </head>
    <body>
        <div id="app">
            <p>{{ num }}</p>
            <button @click="num++">按钮</button>
        </div>
    </body>
    </html>
    

    3.5 vue对象的生命周期

    每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.min.js"></script>
        <script>
        window.onload = function(){
            var vm = new Vue({
                el:"#app",
                data:{
                    num:0
                },
                beforeCreate:function(){
                    console.log("beforeCreate,vm对象尚未创建,num="+ this.num);  //undefined
                    this.name=10; // 此时没有this对象呢,所以设置的name无效,被在创建对象的时候被覆盖为0
                },
                created:function(){
                    console.log("created,vm对象创建完成,设置好了要控制的元素范围,num="+this.num );  // 0
                    this.num = 20;
                },
                beforeMount:function(){
                    console.log( this.$el.innerHTML ); // <p>{{num}}</p>
                    console.log("beforeMount,vm对象尚未把data数据显示到页面中,num="+this.num ); // 20
                    this.num = 30;
                },
                mounted:function(){
                    console.log( this.$el.innerHTML ); // <p>30</p>
                    console.log("mounted,vm对象已经把data数据显示到页面中,num="+this.num); // 30
                },
                beforeUpdate:function(){
                    // this.$el 就是我们上面的el属性了,$el表示当前vue.js所控制的元素#app
                    console.log( this.$el.innerHTML );  // <p>30</p>
                    console.log("beforeUpdate,vm对象尚未把更新后的data数据显示到页面中,num="+this.num); // beforeUpdate----31
                    
                },
                updated:function(){
                    console.log( this.$el.innerHTML ); // <p>31</p>
                    console.log("updated,vm对象已经把过呢更新后的data数据显示到页面中,num=" + this.num ); // updated----31
                },
            });
        }
        </script>
    </head>
    <body>
        <div id="app">
            <p>{{num}}</p>
            <button @click="num++">按钮</button>
        </div>
    </body>
    </html>
    

    总结:

    在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
    mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。
    
    另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created
    

    3.2 阻止事件冒泡和刷新页面

    使用.stop和.prevent

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .box1{
                 200px;
                height: 200px;
                background: #ccc;
            }
            .box2{
                 100px;
                height: 100px;
                background: pink;
            }
        </style>
        <script src="js/vue.min.js"></script>
        <script>
        window.onload = function(){
            var vm = new Vue({
                el:"#app",
                data:{}
            })        
        }
        </script>
    </head>
    <body>
        <div id="app">
            <div class="box1" @click="alert('box1')">
                <div class="box2" @click.stop.prevent="alert('box2')"></div>   <!-- @click.stop来阻止事件冒泡 -->
            </div>
    
            <form action="#">
                <input type="text">
                <input type="submit">
                <input type="submit" value="提交02" @click.prevent=""> <!-- @click.prevent来阻止表单提交 -->
            </form>
        </div>
    
    </body>
    </html>
    

    3.3 综合案例-todolist

    我的计划列表

    html代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>todolist</title>
    	<style type="text/css">
    		.list_con{
    			600px;
    			margin:50px auto 0;
    		}
    		.inputtxt{
    			550px;
    			height:30px;
    			border:1px solid #ccc;
    			padding:0px;
    			text-indent:10px;
    		}
    		.inputbtn{
    			40px;
    			height:32px;
    			padding:0px;
    			border:1px solid #ccc;
    		}
    		.list{
    			margin:0;
    			padding:0;
    			list-style:none;
    			margin-top:20px;
    		}
    		.list li{
    			height:40px;
    			line-height:40px;
    			border-bottom:1px solid #ccc;
    		}
    
    		.list li span{
    			float:left;
    		}
    
    		.list li a{
    			float:right;
    			text-decoration:none;
    			margin:0 10px;
    		}
    	</style>
    </head>
    <body>
    	<div class="list_con">
    		<h2>To do list</h2>
    		<input type="text" name="" id="txt1" class="inputtxt">
    		<input type="button" name="" value="增加" id="btn1" class="inputbtn">
    
    		<ul id="list" class="list">
    			<!-- javascript:; # 阻止a标签跳转 -->
    			<li>
    				<span>学习html</span>
    				<a href="javascript:;" class="up"> ↑ </a>
    				<a href="javascript:;" class="down"> ↓ </a>
    				<a href="javascript:;" class="del">删除</a>
    			</li>
    			<li><span>学习css</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>
    			<li><span>学习javascript</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>
    		</ul>
    	</div>
    </body>
    </html>
    

    特效实现效果:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>todolist</title>
    	<style type="text/css">
    		.list_con{
    			600px;
    			margin:50px auto 0;
    		}
    		.inputtxt{
    			550px;
    			height:30px;
    			border:1px solid #ccc;
    			padding:0px;
    			text-indent:10px;
    		}
    		.inputbtn{
    			40px;
    			height:32px;
    			padding:0px;
    			border:1px solid #ccc;
    		}
    		.list{
    			margin:0;
    			padding:0;
    			list-style:none;
    			margin-top:20px;
    		}
    		.list li{
    			height:40px;
    			line-height:40px;
    			border-bottom:1px solid #ccc;
    		}
    
    		.list li span{
    			float:left;
    		}
    
    		.list li a{
    			float:right;
    			text-decoration:none;
    			margin:0 10px;
    		}
    	</style>
        <script src="js/vue.js"></script>
    </head>
    <body>
    	<div id="todolist" class="list_con">
    		<h2>To do list</h2>
    		<input type="text" v-model="message" class="inputtxt">
    		<input type="button" @click="addItem" value="增加" class="inputbtn">
    		<ul id="list" class="list">
    			<li v-for="item,key in dolist">
    				<span>{{item}}</span>
    				<a @click="upItem(key)" class="up" > ↑ </a>
    				<a @click="downItem(key)" class="down"> ↓ </a>
    				<a @click="delItem(key)" class="del">删除</a>
    			</li>
    		</ul>
    	</div>
        <script>
        // 计划列表代码
        let vm = new Vue({
            el:"#todolist",
            data:{
                message:"",
                dolist:[
                    "学习html",
                    "学习css",
                    "学习javascript",
                ]
            },
            methods:{
                addItem(){
                    if(this.messsage==""){
                        return false;
                    }
    
                    this.dolist.push(this.message);
                    this.message = ""
                },
                delItem(key){
                    // 删除和替换
                    // 参数1: 开始下表
                    // 参数2: 元素长度,如果不填默认删除到最后
                    // 参数3: 表示使用当前参数替换已经删除内容的位置
                    this.dolist.splice(key, 1);
                },
                upItem(key){
                    if(key==0){
                        return false;
                    }
                    // 向上移动
                    let result = this.dolist.splice(key,1);
                    this.dolist.splice(key-1,0,result[0]);
                },
                downItem(key){
                    // 向下移动
                    let result = this.dolist.splice(key, 1);
                    console.log(result);
                    this.dolist.splice(key+1,0,result[0]);
                }
            }
        })
        </script>
    </body>
    </html>
    
  • 相关阅读:
    (转)6 个重构方法可帮你提升 80% 的代码质量
    (转)卸载和安装LINUX上的JDK
    (转)一些国外优秀的elasticsearch使用案例
    (转)Redis 集群方案
    (转)理想化的 Redis 集群
    (转)Hprose与WCF在云计算平台Azure上的对决
    (转).NET技术+25台服务器怎样支撑世界第54大网站
    Hbase split的过程以及解发条件
    test
    HTTP和HTTPS详解
  • 原文地址:https://www.cnblogs.com/ghh520/p/12951685.html
Copyright © 2020-2023  润新知