1. 程式人生 > >vue2.0變化

vue2.0變化

之前有很多的vue知識總結都是圍繞1.0版本實現的,下面主要總結一下2.0相對於1.0的一些變化。

元件定義

在vue1.0中,我們有使用vue.extend()來建立元件構造器繼而建立元件例項,如下所示。

<div id="box">
        <aaa></aaa>
    </div>
    <script>
        var Aaa=Vue.extend({
            template:'<h3>我是全域性元件</h3>'
        });
        Vue.component(
'aaa',Aaa); var vm=new Vue({ el:'#box', }); </script>

但是在vue2.0中,推出了一種更簡潔的元件定義方法。

<template id="aaa">
            <p>我是元件</p>
    </template>
    <div id="box">
        <aaa></aaa>
        {{msg}}
    </div>
    <
script> var Home={ template:'#aaa' }; window.onload=function(){ new Vue({ el:'#box', data:{ msg:'welcome vue2.0' }, components:{ 'aaa':Home } }); };
</script>

程式碼片段

在vue1.0中,我們可以將多個程式碼片段同時放在元件模板中,如下所示。

<div id="box">
        <aaa></aaa>
    </div>
    <script>
        Vue.component('aaa',{
            template:`<p>我是元件元素</p>
                        <p>我也是元件元素</p>
                        <p>我還是元件元素</p>
                    `
        });
        var vm=new Vue({
            el:'#box',
        });
    </script>

但是當我們將vue.js改為2.0的時候,就會報錯。

因為在vue2.0中,元件裡面只能存在一個根元素,所以當有多個元素存在時,需要使用一個根元素進行包裹,如下所示。

<div id="box">
        <aaa></aaa>
    </div>
    <script>
        Vue.component('aaa',{
            template:`<div>
                            <p>我是元件元素</p>
                            <p>我也是元件元素</p>
                            <p>我還是元件元素</p>
                        </div>
                    `
        });
        var vm=new Vue({
            el:'#box',
        });
    </script>

 生命週期

 在vue1.0中的生命週期函式主要有下圖構成:

在vue2.0中,生命週期函式較之前有了比較大的改變:

我們可以通過一個具體的例項來理解這些函式。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="vue.js"></script> 
</head>
<body>
    <div id="box">
        <input type="button" value="更新資料" @click="update">
        <input type="button" value="銷燬元件" @click="destroy">
        {{msg}}
    </div>
    <script>
        new Vue({
                el:'#box',
                data:{
                    msg:'welcome vue2.0'
                },
                methods:{
                    update(){
                        this.msg='大家好';
                    },
                    destroy(){
                        this.$destroy();
                    }
                },
                beforeCreate(){
                    console.log('元件例項剛剛被建立');
                },
                created(){
                    console.log('例項已經建立完成');
                },
                beforeMount(){
                    console.log('模板編譯之前');
                },
                mounted(){
                    console.log('模板編譯完成');
                },
                beforeUpdate(){
                    console.log('元件更新之前');
                },
                updated(){
                    console.log('元件更新完畢');
                },
                beforeDestroy(){
                    console.log('元件銷燬之前');
                },
                destroyed(){
                    console.log('元件銷燬之後');
                }
            });
    </script>
</body>
</html>

首先沒有任何操作時,例項建立和模板編譯。

當我們點選更新資料後

最後點選銷燬元件

迴圈

 我們先看一個基於vue1.0的迴圈

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="vue1.0.js"></script> 
</head>
<body>
    <div id="box">
        <input type="button" value="新增" @click="add">
        <ul>
            <li v-for="val in list" >
                {{val}}
            </li>
        </ul>
    </div>
    <script>
        new Vue({
                el:'#box',
                data:{
                    list:['width','height','border']
                },
                methods:{
                    add(){
                        this.list.push('background');
                    }
                }
            });
    </script>
</body>
</html>

 

 當我們第一次點選時在陣列中添加了一項,但是再次點選時,就會報錯,因為在vue1.0的迴圈中,預設是不允許重複資料的,除非在迴圈中新增track-by,如下:

 <div id="box">
        <input type="button" value="新增" @click="add">
        <ul>
            <li v-for="val in list" track-by="$index">
                {{val}}
            </li>
        </ul>
    </div>

但是在vue2.0中,預設就可以新增重複資料。當我們把上面例子中的vue.js換成2.0的,就不再會報錯了。

自定義鍵盤事件

首先是在vue1.0中,我們是通過directive來自定義鍵盤事件的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="vue1.0.js"></script> 
</head>
<body>
    <div id="box">
        <input type="text" @keyup.ctrl="change">
    </div>
    <script>
       Vue.directive('on').keyCodes.ctrl=17;
            new Vue({
                el:'#box',
                data:{
                },
                methods:{
                    change(){
                        alert('改變了');
                    }
                }
            });
    </script>
</body>
</html>

但是在vue2.0中,我們自定義鍵盤事件的寫法發生了變化。

<div id="box">
        <input type="text" @keyup.ctrl="change">
    </div>
    <script>
       Vue.config.keyCodes.ctrl=17;
            new Vue({
                el:'#box',
                data:{
                },
                methods:{
                    change(){
                        alert('改變了');
                    }
                }
            });
    </script>

過濾器

 在之前總結過濾器的時候有提到過,在vue1.0中,存在很多系統再帶的過濾器,但是現在在vue2.0中,刪除了所有的內建過濾器,使用者需要按需自定義過濾器。