vue元件內部繫結class還有style樣式
阿新 • • 發佈:2019-01-22
首先,先申明,大家肯定在看到我de部落格之前,應該已經看了無數篇關於class還有style繫結的部落格,但是可能不理想,那是因為那些都是在app。vue中直接使用或則是在映入js的條件下使用,而不是在使用腳手架並且是在子元件中
先慣例寫寫關於vue文件中的程式碼(以style為例子)
這是大家都看過的,但是我直接使用了,當然沒報錯,也不是因為什麼版本問題,觀察了一下。我看到了data這個“物件”、
覺得很是納悶,為什麼?
if (!vm) { // in a Vue.extend merge, both should be functions if (!childVal) { return parentVal } //判斷data的類別 if (typeof childVal !== 'function') { process.env.NODE_ENV !== 'production' && warn( 'The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm ) return parentVal } if (!parentVal) { return childVal }
這個是文件裡面的,看得出來,如果是在子元件,我們看到的應該是使用data“函式”,所以這方法肯定不對
什麼意思?簡單來說Vue 例項的資料物件。Vue.js 會遞迴地將它全部屬性轉為 getter/setter,從而讓它能響應資料變化。這個物件必須是普通物件:原生物件,getter/setter 及原型屬性會被忽略。不推薦觀察複雜物件。 在例項建立之後,可以用 vm.$data 訪問原始資料物件。Vue 例項也代理了資料物件所有的屬性。 在定義元件時,同一定義將建立多個例項,此時 data 必須是一個函式,返回原始資料物件。如果 data 仍然是一個普通物件,則所有的例項將指向同一個物件!換成函式後,每當建立一個例項時,會呼叫這個函式,返回一個新的原始資料物件的副本。 以上內容均來自官網,說得很清楚啊。 檔案寫成.vue的檔案就是元件的寫法,因此這時data必須是一個函式,而你貼的var vm = new Vue({})是直接跑在瀏覽器環境下的用法,這時data可以是一個普通物件,也可以寫成一個返回普通物件的函式,不過沒必要。 當然,這些都是在腳手架裡面的,如果只是單純的引入js檔案,那麼data就無所謂了
在例項中data是物件, 在元件中data就得是函式返回物件
就是main。js中是例項,在元件中就應該是函數了,
解析來上程式碼了:
<div class="index_nav"> <ul v-bind:style="mystyle"> <li v-for="(tab,index) in tabs" @click="methods2(tab.text,index)">{{tab.text}}</li> <li style="clear:both;"></li> </ul> </div>
接著是我們的data函式:
export default {
name: "index",
data: function() {
return {
//被選中的tab標籤的陣列
//假定陣列
allinfo: [{
name: "a",
age: "1",
address: "廣東"
},
{
name: "a",
age: "1",
address: "廣西"
},
{
name: "a",
age: "1",
address: "雲南"
}
],
chosetype: {
chosename: "全部",
choseindex: "0"
},
message: "",
tabs: [{ text: '全部' }, { text: "保養" }, { text: "機械" }, { text: "清潔" }],
mystyle: {
height: '1.2rem',
width: '2rem'
}
}
},
methods: {
methods1: function() {
console.log("你剛剛點選搜尋按鈕");
console.log(this.message);
},
//tab選項切換
methods2: function(tab, index) {
console.log(tab);
console.log(index);
this.chosetype.chosename = tab;
this.chosetype.choseindex = index;
console.log(this.chosetype);
this.allinfo.push({"name": this.chosetype, "age": chosetype.index, "choseindex": chosetype.chosename});
}
},
created: function() {
this.mystyle.width = 2.2 * this.tabs.length + 0.2 + "rem";
console.log(this.tabs.length);
},
}
至於這是不是你想要得,我不清楚,只能幫到這,希望是你想要的