1. 程式人生 > >【Vue.js學習筆記】8:建立多個Vue例項物件,認識Vue中的元件

【Vue.js學習筆記】8:建立多個Vue例項物件,認識Vue中的元件

建立多個Vue例項物件

這裡在同一個js檔案中建立了兩個Vue例項物件,它們各自能完成前面學的那些功能,同時使用物件名稱也可以互相訪問,協同實現一些功能。

index.html

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <!--<link rel="stylesheet" href="style3.css">-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <!--這次建立2個根容器--> <div id="vue-app1"> <h3>{{title}}</h3> <p>{{greet}}</p> </div> <div id="vue-app2"> <h3>{{title}}</h3> <
p
>
{{greet}}</p> <button v-on:click="changeTitle1()">改變app1的title</button> </div> <script src="app10.js"></script> </body> </html>

app10.js

注意這裡const只是保證其修飾的為常量不被改變,也就是v1和v2的指向,但是它們內部的屬性還是可以改變的。

//注意var/let/const的區別,在這裡用哪個都可以的時候儘量選擇後兩個,它們約束了變數提升
// 例項化vue物件1
const v1 = new Vue({ el: "#vue-app1", data: { title: "app1的內容", }, methods: {}, computed: { greet: function () { return "Hello App1"; } } }); // 例項化vue物件2 const v2 = new Vue({ el: "#vue-app2", data: { title: "app2的內容", }, methods: { changeTitle1: function () { v1.title = "app1的title改變了"; } }, computed: { greet: function () { return "Hello App2"; } } }); v2.title = "app2的titile在js檔案匯入時就被改變了";

執行結果

在這裡插入圖片描述

認識Vue中的元件

Vue例項物件中的data、methods、computed都可以在元件中實現:

Vue.component("元件名", 物件);

而不必寫在Vue例項物件中。

注意下面例子裡的元件的模板裡將雙引號換成反引號是使用ES6的語法,這樣就可以換行寫了。

index.html

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <!--<link rel="stylesheet" href="style3.css">-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<!--這次建立2個根容器-->
<div id="vue-app1">
    <greeting></greeting>
</div>
<div id="vue-app2">
    <greeting></greeting>
</div>
<script src="app10.js"></script>
</body>
</html>

app10.js

注意第13行和第26行註解掉的程式碼,如果將它們開啟,也就是在data所對應的function中返回的是一個共享的物件,那麼點選改名時所改的這個data物件是共享的,所以點選改名按鈕,兩個Vue容器下的name都會改變。而在目前這種情況下,點選改名只會改變那個Vue容器下的name。

// 定義了一個Vue元件,將元件名當成一個標籤使用
// 這樣HTML上不必有太多的結構,而且內容可以動態地來自這個元件中
Vue.component("greeting", {
    //元件模板,當使用元件時是顯示這個基礎上的內容,注意要放在一個根標籤裡
    template: `
    <p>
        {{name}}:大家好,這是一個p標籤
        <button v-on:click="changeName()">改名</button>
    </p>
    `,
    //元件中的資料
    data: function () {
        // return dt;
        return {
            name: "lzh"
        };
    },
    //元件中的方法
    methods: {
        changeName: function () {
            this.name = "LZH";
        }
    }
});

// var dt={name:"lzh"};

// 例項化vue物件1
new Vue({
    el: "#vue-app1"
});

// 例項化vue物件2
new Vue({
    el: "#vue-app2"
});

執行結果

在這裡插入圖片描述