天天看點

commandtext 屬性尚未初始化_年薪百萬之路--第六十八天 Vue對象提供的屬性功能

commandtext 屬性尚未初始化_年薪百萬之路--第六十八天 Vue對象提供的屬性功能
一 過濾器

過濾器,就是vue允許開發者自定義的文本格式化函數,可以使用在兩個地方:輸出内容和操作資料中。

共有兩種定義方式

1.使用Vue.filter()進行全局定義
Vue.filter("RMB1", function(v){
  	//就是來格式化(處理)v這個資料的
  	if(v==0){
    		return v
  	}

  	return v+"元"
})
           
2 在vue對象中通過filters屬性來定義
var vm = new Vue({
  el:"#app",
  data:{},
  filters:{
    RMB2:function(value){
      if(value==''){
        return;
      }else{
      	return '¥ '+value;
      }
    }
	}
});
           
二 計算和偵聽屬性

vue提供了一個計算屬性(computed),可以讓我們把調整data資料的代碼存在在該屬性中。

<!DOCTYPE html>
<html >
<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>
           
監聽屬性

偵聽屬性是一個對象,它的鍵是要監聽的對象或者變量,值一般是函數,當偵聽的data資料發生變化時,會自定執行的對應函數,這個函數在被調用時,vue會傳入兩個形參,第一個是變化前的資料值,第二個是變化後的資料值。

<!DOCTYPE html>
<html >
<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>
           
三 vue對象的生命周期

每個Vue對象在建立時都要經過一系列的初始化過程。在這個過程中Vue.js會自動運作一些叫做生命周期的的鈎子函數,我們可以使用這些函數,在對象建立的不同階段加上我們需要的代碼,實作特定的功能。

<!DOCTYPE html>
<html >
<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>
           
四 阻止事件冒泡和重新整理頁面

使用.stop和.prevent

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box1{
            width: 200px;
            height: 200px;
            background: #ccc;
        }
        .box2{
            width: 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>
           

繼續閱讀