VueJS 語法

vuejs 的使用

<div class='box'>
    <p>{{msg}}</p>
    <p>{{name}}</p>
</div>
//創(chuàng)建一個控制器
new Vue({
    //選擇器,控制器要去控制哪個標簽,給哪個標簽當中提供數(shù)據(jù)
    el:'.box'.
    //數(shù)據(jù)模型,給 el 選擇出來的內(nèi)容提供數(shù)據(jù)
    data:{
        msg:'hello world',
        name:'xmg'
    }
//另一種綁定方法
}).$mount('.box');

vuejs 的一些指令

  • 不閃爍的數(shù)據(jù)綁定 <p v-text='msg'></p>
  • 如果數(shù)據(jù)中有 html 標簽,則會被解析 <p v-html = 'msg'></p>
  • 顯示標簽 <p v-show='true'>123</p> 如果另一個標簽與此標簽相反的顯示隱藏則用<p v-else>456</p>
  • <p v-pre>{{msg}}</p> 不會解析直接原樣輸出
  • <li v-for="(key,value) in course">{{key}}--{{value}}</li> 遍歷
  • 上述遍歷是vue.js1.0,在 vue.js 2.0 中 <li v-for="(value,key) in course">{{value}}--{{key}}</li> 第二個參數(shù)變?yōu)橄聵?,第一個參數(shù)為值
  • <p v-if='true'>123</p> 標簽存在與否,相反的用 v-else 屬性
  • vuejs 中沒有templateUrl,所以模版都寫在<template></template> 標簽中
  • <input type='text' v-model='name'> 雙向綁定
// new Vue() 會返回當前的控制器,使用返回值的控制器可以直接調(diào)用里面的屬性
var vue = new Vue({
    data:{
        name:'',
        age:10
    }
}).$mount('#box');

Vue.js 的事件

vuejs 中的事件指令都寫在控制器下的methods:{} 中

<div id="box">

    <p>{{age}}</p>
    <button v-on:mouseenter="modify(5)">修改年齡</button>
    <button @click="age=20">修改年齡</button>  <!--可以直接在后面操作模型的屬性-->
    <button @click="modify(20)">修改年齡</button>  <!--可以直接在后面操作模型的屬性-->

</div>

<script>

    var vue = new Vue({     //new Vue() 會返回當前的控制器,使用返回的控制器可以直接調(diào)用里面的屬性。
        data:{
            age:10,
        },
        methods:{
            modify:function (agr) {
                this.age = agr;
            }
        }

    }).$mount('#box');   //$mount(選擇器)


</script>
<div @click = 'show'>
    <button @keydow='modify($event)'>點擊</button>
    //給指令鍵注冊事件
    <input type="text" @keydow.xmg="down($event)">
</div>

<script>
    Vue.directive('on').keyCodes.xmg = 17;
    new Vue({
        data:{
            age:10
        },
        methods:{
            modify:function(e){
                this.age = 20;
                //阻止事件冒泡
                e.cancelBubble = true ;
            }.
            down:function(e){
                alert('down----' + e.keyCode);
            }
        }
    }).$mount('#box');
</script>

vue.js 過濾器

<div id="app">
    <p>{{name | uppercase | lowercase}}</p>
    <p>{{price | currency '¥'}}</p> <!-- 傳參通過空格來傳參-->
    <ul>
        <li v-for="value in curse | filterBy 'css'">{{value}}</li>
    </ul>

    <ul>
        <li v-for="value in curse | limitBy  2">{{value}}</li>
    </ul>
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            name:'hello',
            price : 10,
            curse:['css','js','html']
        }
    });

</script>
  • 綁定控制器時,不建議綁定到 body\html 上,在 vue2.0當中這么做會報錯;在 vue2.0 里,所有的內(nèi)置過濾器都被刪除了,以壓縮框架體積,但是可以自定義過濾器
Vue.filter('xmgCurrency',function(input,a){
    return a + input;
})

自定義指令

  • Vue.directive 定義的指令都是以屬性形式的 'Attribute'
Vue.directive('red',function(){
    //在自定義指令當中可以拿到指令標簽
    this.el.style.background = 'red';
})
  • 自定義指令可以傳參數(shù)
Vue.directive('color',function(color){
    this.el.style.background = color;
})
  • 自定義元素指令
Vue.elementDirective('xmg-red',{
    bind:function(){
        this.el.style.background = 'red';
    }
})

<p>{{name}}</p>
<p v-red>123456</p>
<p v-color=" 'green' ">77777</p>
<xmg-red>777788888</xmg-red>

計算屬性 get 方法和 set 方法的調(diào)用形式

  • 點語法調(diào)用的是 get 方法
  • 點等于調(diào)用的是 set 方法
 new Vue({
        el:'#app',
        data:{
            num:3,
            price : 10,
        },
        methods:{
            count(){
                this.total;       //會自動調(diào)用get方法
                this.total = 10;  //會自動調(diào)用set方法把10傳給set方法
            }
        },
        computed:{ //當中聲明都是計算屬性
                    //在每一個計算屬性當中有兩個方法,get方法與set方法
                    //get與set方法是自己調(diào)用的方法。
                    //get方法調(diào)用時機:當使用 this.total時會調(diào)用get方法  return的值,就是定義屬性的值。
                    //想要獲取屬性時,會自動調(diào)用get方法
                    /*----------------------------*/
                    //set方法調(diào)用時機
                    //給該屬性賦值是會自動調(diào)用set方法  this.total = 100;  會自動調(diào)用set 并且會把賦的值傳給set的參數(shù)。
                    //在set方法當中,不能再使用.屬性=value    this.tataol = 100;
            total:{
                get(){
                    console.log('調(diào)用了get方法'+value);
                    return this.price * this.num + 1;
                },
                set(value){
                    this.total = 20;
                }
            },
            age:{
                get(){
                    console.log('調(diào)用了get方法'+value);
                    return this.price * this.num + 1;
                },
                set(value){
                    this.total = 20;
                }
            }
        }
    });

生命周期 鉤子函數(shù)

在 vue2.0 鉤子函數(shù)有所變化

 var vue =  new Vue({
        el:'#app',
        data:{
            name:'hello',
            price : 10,
            curse:['css','js','html']
        },
        methods:{
            destroyVue:function () {
                alert(1);
                vue.$destroy();
                this.$destroy();
            }
        },
        created:function(){               //鉤子函數(shù):在某個特定時期會自動調(diào)用相應(yīng)的方法。
            alert('實例已經(jīng)創(chuàng)建');        //生命周期:從生到死的過程。
        },
        beforeCompile:function(){
            alert('編譯之前');
        },
        compiled:function(){
            alert('編譯之后');
        },
        ready:function(){
            alert('準備插入到文檔中');
        },
        beforeDestroy:function(){
            alert('銷毀之前');
        },
        destroyed:function(){
            alert('銷毀之后');
        }
    });

全局組件

組件本質(zhì)就是模版

//創(chuàng)建了一個模版
var ext = Vue.extend({
    template:'<h1>我是組件</h1>'
});
//全局組件:在任何一個控制器當中都可以使用此組件
Vue.component('xmg',ext);

局部組件

  • 局部組件:只能在自己聲明的控制器中使用,可以定義多個
var ext = Vue.extend({
    template:'<h1>我是組件</h1>'
});
new Vue({
    el:'.box1',
    data:{
        msg:'xmg'
    },
    components:{
        xmg:ext,
        gxq:{
            template:'<h1>我是 gxq</h1>'
        }
    }
})

組件綁定數(shù)據(jù)

  • 當創(chuàng)建一個組件時,就是一個隔離作用域,里外數(shù)據(jù)不互通
 /*創(chuàng)建了一個模板*/
    var ext =  Vue.extend({
        template:'<h1>我是組件</h1>'
    });
    /*局部組件:只能在自己聲明的控制器當中來使用 ,可以定義多個*/
    new Vue({
       el:'.box1',
        data:{
           msg:'xmg'
        },

        components:{   //當創(chuàng)建一個組件是,就是一個隔離作用域。
            xmg:ext,
            gxq:{
                data:function () {
                  return {
                      msg:'myMsg',
                      name:'name123'
                  }
                },
                methods:{
                    show(){
                        alert('show');
                    }
                },
                template:'<h1>我是gxq組件{{msg}}----{{name}}</h1><button @click="show">點擊</button>'
            }
        }
    });

組件的模版

    new Vue({
        el:'#app',
        components:{
            xmg:{
                template:'#temp1'  //不能使用templateUrl 來引用模板文件
                                     //Vue考慮到性能性能原因。
                                     //因為瀏覽器不能訪問文件。angular當中使用url來訪問一個文件,
                                    // 它是發(fā)送了一個Ajax請求,拿到請求結(jié)果,插入到文檔當中。
            }
        }
    })

動態(tài)組件

<div id="app">
    <button @click="change">切換</button>
    <!--在屬性前面加上":" 會解析后面的內(nèi)容 到控制器當中查找有沒有這個屬性-->
    <component v-bind:is="name"></component>
    <component is="xmg"></component> <!--不去解析里面的值-->
</div>

 new Vue({
        el:'#app',
        data:{
            name:'xmg'
        },
        methods:{
            change(){
                this.name = 'xmg2';
            }
        },
        components:{
            xmg:{
                template:'<h1>xmg組件</h1>'
            },
            xmg2:{
                template:'<h1>xmg2組件</h1>'
            }  
        }
    })
  • es6.0 的函數(shù)寫法
methods:{
    change(){
        this.name = 'xmg2';
    }
}

父子組件


<div id="app">

    <fathercom></fathercom>

</div>


<template id="temp1">

    <h1>xmg組件{{name}}</h1>
    <input type="text" v-model="name">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <hr>
    <!--傳遞的數(shù)據(jù)雙向綁定-->
    <childcom :msg.sync="name"></childcom>

</template>

new Vue({
    el:'#app',
    components:{
        fathercom:{
            template:'#temp1',
            data:function(){
                return {
                    name:'xmg'
                }
            },
            components:{
                //聲明子組件,聲明的子組件只能在父組件的模版中
                children:{
                    template:'<h1>我是子組件{{msg}}</h1> <input type="text" v-model="msg">',
                    //在使用組件時,外部可以傳遞一個值進來
                    //<childcom :msg="name"></childcom>
                    //父數(shù)據(jù)的變化會影響子數(shù)據(jù)變化
                    //子數(shù)據(jù)變化不會影響父數(shù)據(jù)變化
                    //傳遞數(shù)據(jù)的時候如果加上 .sync 表示雙向綁定,互相影響
                    // <childcom :msg.sync="name"></childcom>
                    props:['msg']
                }
            }
        }
    }
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內(nèi)容