【Vue.js學習筆記】8:建立多個Vue例項物件,認識Vue中的元件
阿新 • • 發佈:2018-12-26
建立多個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"
});