小編給大家分享一下vue中實例方法和數據的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.vm.$set
問題描述:
如何在不通過循環數據給list數據添加一個showMore屬性,并且在moreFun中改變這個新增屬性的值,并實現雙向綁定?
<template>
<div id="app">
<div class="demo">
<ul>
<template v-for="(v,index) in list">
<li>{{v.name}}</li>
<div v-show="!v.showMore">
<button @click="moreFun(index)">展示更多</button>
</div>
</template>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
list: [{
name: '小穎'
}, {
name: '仔仔'
}, {
name: '黑妞'
}, {
name: '土豆'
}]
}
},
methods: {
moreFun(index) {
console.log(this.list);
}
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>一開始小穎并不知道怎么做,而且小穎覺得
<div v-show="!v.showMore"> <button @click="moreFun(index)">展示更多</button> </div>
這段代碼肯定會報錯,然而當小穎寫上后發現,并沒有,后來那位帥鍋告訴我,看看vue的 vm.$set 小穎看后將moreFun方法寫為:
moreFun(index) {
this.$set(this.list[index], 'showMore', true);
console.log(this.list);
}然后就達到小穎想要的結果啦。小穎當時遇到的問題類似于這樣的:
<template>
<div id="app">
<div class="demo">
<ul>
<template v-for="(v,index) in list">
<li>{{v.name}}</li>
<div v-show="!v.showMore">
<button @click="moreFun(index)">展示更多</button>
</div>
</template>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
list: [{
name: '小穎'
}, {
name: '仔仔'
}, {
name: '黑妞'
}, {
name: '土豆'
}]
}
},
mounted: function() {
this.list.forEach(function(element, index) {
element.showMore = false;
});
},
methods: {
moreFun(index) {
this.list[index].showMore = true;
console.log(this.list);
}
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>問題:當執行完moreFun方法后,雖然list中的showMore屬性的值變成了true,但是
<div v-show="!v.showMore"> <button @click="moreFun(index)">展示更多</button> </div>
按鈕 展示更多 仍然顯示著,這是因為,如果在實例創建之后添加新的屬性到實例上,它不會觸發視圖更新。
所以后來小穎就將showMore直接添加到list中,然后就好啦。現在想想其實用個vm.$set就解決啦。
2.vm.$watch
用法:
觀察 Vue 實例變化的一個表達式或計算屬性函數。回調函數得到的參數為新值和舊值。表達式只接受監督的鍵路徑。對于更復雜的表達式,用一個函數取代。
注意:在變異 (不是替換) 對象或數組時,舊值將與新值相同,因為它們的引用指向同一個對象/數組。Vue 不會保留變異之前值的副本。
<template>
<div id="app">
<div class="demo">
<input type="text" class="num1" v-model="num1">
<label class="sign">-</label>
<input type="text" class="num2" v-model="num2">
<label class="sign">=</label>
<label class="result">{{resultNum}}</label>
</div>
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
num1: 1,
num2: 5,
resultNum: null
}
},
watch: {
num1: function() {
var _num1 = parseInt(this.num1);
var _num2 = parseInt(this.num2);
this.resultNum = _num1 - _num2;
},
num2: function() {
var _num1 = parseInt(this.num1);
var _num2 = parseInt(this.num2);
this.resultNum = _num1 - _num2;
}
},
mounted: function() {
var _num1 = parseInt(this.num1);
var _num2 = parseInt(this.num2);
this.resultNum = _num1 - _num2;
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
input.num1,
input.num2 {
width: 100px;
}
label.sign {
font-size: 30px;
vertical-align: -3px;
}
label.result {
font-size: 20px;
}
</style>3.vm.$delete
用法:
這是全局 Vue.delete 的別名。
<template>
<div id="app">
<div class="demo">
<ul>
<template v-for="(v,index) in list">
<li>{{v.name}}</li>
<li>{{v.age}}</li>
<button @click="deleteFun(index)">delete</button>
</template>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
list: [{
name: '小穎',
age:22
}, {
name: '仔仔',
age:1
}, {
name: '黑妞',
age:1
}, {
name: '土豆',
age:1
}]
}
},
methods: {
deleteFun(index) {
this.$delete(this.list[index], 'age');
}
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>以上是“vue中實例方法和數據的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯成都網站設計公司行業資訊頻道!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文題目:vue中實例方法和數據的示例分析-創新互聯
網頁URL:http://www.yijiale78.com/article40/cegsho.html
成都網站建設公司_創新互聯,為您提供小程序開發、營銷型網站建設、關鍵詞優化、品牌網站制作、建站公司、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯