最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決vue中數(shù)據(jù)更新視圖不更新問題this.$set()方法

 更新時間:2022年06月29日 08:54:36   作者:遠(yuǎn)一航一  
這篇文章主要介紹了解決vue中數(shù)據(jù)更新視圖不更新問題this.$set()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue數(shù)據(jù)更新視圖不更新

1.data中有對象obj :{name:'遠(yuǎn)航',age:18}

2.此時新增phone

this.obj.phone = '123456'

再次更新 用this.obj.phone = '654321' 視圖未更新  用this.$set(this.obj,"phone", "654321");也未更新

3.添加完成以后數(shù)據(jù)有更新,視圖未更新,

解決問題

因為obj中沒有phone字段,第一次新增屬性的時候就要用this.$set(this.obj,"phone", "123456");就可以了

我第一次新增屬性沒有用this.$set(),因此沒有建立數(shù)據(jù)監(jiān)聽

新增多個屬性方法

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

vue數(shù)據(jù)不更新的原因(數(shù)據(jù)更改了,但是視圖沒有更新)

templete:

<div id="app">
? ? ? ? <h2>{{dataObj.text}}</h2>
</div>

js:

new Vue({
? ? ? ? ? ? el: '#app',
? ? ? ? ? ? data: {
? ? ? ? ? ? ? ? dataObj: {}
? ? ? ? ? ? },
? ? ? ? ? ? ready: function () {
? ? ? ? ? ? ? ? var self = this;
? ? ? ? ? ? ? ? /**
? ? ? ? ? ? ? ? ?* 異步請求模擬
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? setTimeout(function () {
? ? ? ? ? ? ? ? ? ? self.dataObj = {};//真正實現(xiàn)數(shù)據(jù)更新的是這行代碼
? ? ? ? ? ? ? ? ? ? self.dataObj['text'] = 'new text';
? ? ? ? ? ? ? ? }, 3000);
? ? ? ? ? ? }
})

上面的代碼非常簡單,我們都知道vue中在data里面聲明的數(shù)據(jù)才具有響應(yīng)式的特性,所以我們一開始在data中聲明了一個dataObj空對象,然后在異步請求中執(zhí)行了兩行代碼,如下:

self.dataObj = {};
self.dataObj['text'] = 'new text';

解決辦法

首先清空原始數(shù)據(jù),然后添加一個text屬性并賦值。然后數(shù)據(jù)和模版都更新里。

其中.text屬性不具有響應(yīng)式,但是數(shù)據(jù)更新了。原因:

vue的dom更新是異步的,即當(dāng)setter操作發(fā)生后,指令并不會立馬更新,指令的更新操作會有一個延遲,當(dāng)指令更新真正執(zhí)行的時候,此時.text屬性已經(jīng)賦值,所以指令更新模板時得到的是新值。

具體流程如下

  • self.dataObj = {};發(fā)生setter操作
  • vue監(jiān)測到setter操作,通知相關(guān)指令執(zhí)行更新操作
  • self.dataObj[‘text’] = ‘new text’;賦值語句
  • 指令更新開始執(zhí)行

所以真正的觸發(fā)更新操作是self.dataObj = {};這一句引起的,所以單看上述例子,具有響應(yīng)式特性的數(shù)據(jù)只有dataObj這一層,它的子屬性是不具備的。

數(shù)組更新檢測

Vue 包含一組觀察數(shù)組的變異方法,所以它們也將會觸發(fā)視圖更新。這些方法如下:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

注意事項

由于 JavaScript 的限制,Vue 不能檢測以下變動的數(shù)組:

當(dāng)你利用索引直接設(shè)置一個項時,例如:vm.items[indexOfItem] = newValue

當(dāng)你修改數(shù)組的長度時,例如:vm.items.length = newLength

舉個例子:

var vm = new Vue({
? data: {
? ? items: ['a', 'b', 'c']
? }
})
vm.items[1] = 'x' // 不是響應(yīng)性的
vm.items.length = 2 // 不是響應(yīng)性的

為了解決第一類問題,以下兩種方式都可以實現(xiàn)和vm.items[indexOfItem] = newValue相同的效果,同時也將觸發(fā)狀態(tài)更新:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

你也可以使用 vm.$set 實例方法,該方法是全局方法 Vue.set 的一個別名:

vm.$set(vm.items, indexOfItem, newValue)

為了解決第二類問題,你可以使用 splice:

vm.items.splice(newLength)

對象更改檢測注意事項

還是由于 JavaScript 的限制,Vue 不能檢測對象屬性的添加或刪除:

var vm = new Vue({
? data: {
? ? a: 1
? }
})
// `vm.a` 現(xiàn)在是響應(yīng)式的
vm.b = 2
// `vm.b` 不是響應(yīng)式的

對于已經(jīng)創(chuàng)建的實例,Vue 不能動態(tài)添加根級別的響應(yīng)式屬性。但是,可以使用 Vue.set(object, key, value)方法向嵌套對象添加響應(yīng)式屬性。例如,對于:

var vm = new Vue({
? data: {
? ? userProfile: {
? ? ? name: 'Anika'
? ? }
? }
})

你可以添加一個新的 age 屬性到嵌套的 userProfile 對象:

Vue.set(vm.userProfile, 'age', 27)

你還可以使用 vm.$set 實例方法,它只是全局 Vue.set 的別名:

vm.$set(vm.userProfile, 'age', 27)

有時你可能需要為已有對象賦予多個新屬性,比如使用 Object.assign() 或 _.extend()。在這種情況下,你應(yīng)該用兩個對象的屬性創(chuàng)建一個新的對象。所以,如果你想添加新的響應(yīng)式屬性,不要像這樣:

Object.assign(vm.userProfile, {
? age: 27,
? favoriteColor: 'Vue Green'
})

你應(yīng)該這樣做:

vm.userProfile = Object.assign({}, vm.userProfile, {
? age: 27,
? favoriteColor: 'Vue Green'
})

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue中登錄驗證成功后保存token,并每次請求攜帶并驗證token操作

    Vue中登錄驗證成功后保存token,并每次請求攜帶并驗證token操作

    這篇文章主要介紹了Vue中登錄驗證成功后保存token,并每次請求攜帶并驗證token操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 基于Vue實現(xiàn)簡單的權(quán)限控制

    基于Vue實現(xiàn)簡單的權(quán)限控制

    這篇文章主要為大家學(xué)習(xí)介紹了如何基于Vue實現(xiàn)簡單的權(quán)限控制,文中的示例代碼講解詳細(xì),具有一定的參考價值,需要的小伙伴可以了解一下
    2023-07-07
  • vue中在echarts里設(shè)置的定時器清除不掉問題及解決

    vue中在echarts里設(shè)置的定時器清除不掉問題及解決

    這篇文章主要介紹了vue中在echarts里設(shè)置的定時器清除不掉問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue子級如何向父級傳遞數(shù)據(jù)(自定義事件)

    Vue子級如何向父級傳遞數(shù)據(jù)(自定義事件)

    這篇文章主要介紹了Vue子級如何向父級傳遞數(shù)據(jù)(自定義事件),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖的代碼

    使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖的代碼

    徑向條形圖是一種用于可視化單一數(shù)據(jù)點及其與目標(biāo)或理想值的關(guān)系的圖表類型,它在顯示進(jìn)度、完成率或其他類似度量時非常有用,本文給大家介紹了使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖,感興趣的小伙伴可以參考閱讀下
    2024-06-06
  • vue加載動畫element ui V-loading屬性的踩坑記錄

    vue加載動畫element ui V-loading屬性的踩坑記錄

    這篇文章主要介紹了vue加載動畫element ui V-loading屬性方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue倉庫的使用方式

    vue倉庫的使用方式

    這篇文章主要介紹了vue倉庫的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • vue3中使用swiper及遇到的問題解析

    vue3中使用swiper及遇到的問題解析

    這篇文章主要介紹了vue3中使用swiper及遇到的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 使用Vue.js實現(xiàn)一個循環(huán)倒計時功能

    使用Vue.js實現(xiàn)一個循環(huán)倒計時功能

    在Web應(yīng)用中,倒計時功能常用于各種場景,如活動倒計時、定時任務(wù)提醒等,Vue.js作為一款輕量級的前端框架,提供了豐富的工具和API來實現(xiàn)這些功能,本文將詳細(xì)介紹如何使用Vue.js實現(xiàn)一個循環(huán)倒計時功能,需要的朋友可以參考下
    2024-09-09
  • 五分鐘理解keep?alive用法及原理

    五分鐘理解keep?alive用法及原理

    這篇文章主要為大家介紹了keep?alive用法及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評論

九寨沟县| 泸州市| 开封县| 卓尼县| 博罗县| 南漳县| 宁安市| 江源县| 包头市| 临澧县| 长阳| 福清市| 渭南市| 长兴县| 乐至县| 邢台市| 通榆县| 连城县| 巫山县| 永宁县| 长春市| 柏乡县| 通州区| 民乐县| 博乐市| 东兴市| 留坝县| 鱼台县| 肥城市| 右玉县| 郸城县| 浮山县| 房山区| 曲靖市| 大冶市| 乡宁县| 溆浦县| 厦门市| 彭州市| 安平县| 镇巴县|