91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue.set()和this.$set()的區別是什么

發布時間:2021-06-02 16:01:01 來源:億速云 閱讀:328 作者:Leah 欄目:開發技術

Vue.set()和this.$set()的區別是什么?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

data () {
  return {
    student: {
      name: '',
      sex: ''
    }
  }
}
mounted () { // ——鉤子函數,實例掛載之后
  this.student.age = 24
}

受 ES5 的限制,Vue.js 不能檢測到對象屬性的添加或刪除。因為 Vue.js 在初始化實例時將屬性轉為 getter/setter,所以屬性必須在 data 對象上才能讓 Vue.js 轉換它,才能讓它是響應的。

正確寫法:this.$set(this.data,”key”,value')

mounted () {
  this.$set(this.student,"age", 24)
}

:: Vue 不允許動態添加根級響應式屬性。

例如:

const app = new Vue({
  data: {
    a: 1
  }
  // render: h => h(Suduko)
}).$mount('#app1')

Vue.set(app.data, 'b', 2)

Vue.set()和this.$set()的區別是什么

只可以使用 Vue.set(object, propertyName, value) 方法向嵌套對象添加響應式屬性,例如

var vm=new Vue({
    el:'#test',
    data:{
        //data中已經存在info根屬性
        info:{
            name:'小明';
        }
    }
});
//給info添加一個性別屬性
Vue.set(vm.info,'sex','男');

Vue.set()和this.$set()實現原理

我們先來看看Vue.set()的源碼:

import { set } from '../observer/index'

...
Vue.set = set
...

再來看看this.$set()的源碼:

import { set } from '../observer/index'

...
Vue.prototype.$set = set
...

結果我們發現Vue.set()和this.$set()這兩個api的實現原理基本一模一樣,都是使用了set函數。set函數是從 ../observer/index 文件中導出的,區別在于Vue.set()是將set函數綁定在Vue構造函數上,this.$set()是將set函數綁定在Vue原型上。

function set (target: Array<any> | Object, key: any, val: any): any {
  if (process.env.NODE_ENV !== 'production' &&
    (isUndef(target) || isPrimitive(target))
  ) {
    warn(`Cannot set reactive property on undefined, null, or primitive value: ${(target: any)}`)
  }
  if (Array.isArray(target) && isValidArrayIndex(key)) {
    target.length = Math.max(target.length, key)
    target.splice(key, 1, val)
    return val
  }
  if (key in target && !(key in Object.prototype)) {
    target[key] = val
    return val
  }
  const ob = (target: any).__ob__
  if (target._isVue || (ob && ob.vmCount)) {
    process.env.NODE_ENV !== 'production' && warn(
      'Avoid adding reactive properties to a Vue instance or its root $data ' +
      'at runtime - declare it upfront in the data option.'
    )
    return val
  }
  if (!ob) {
    target[key] = val
    return val
  }
  defineReactive(ob.value, key, val)
  ob.dep.notify()
  return val
}

我們發現set函數接收三個參數分別為 target、key、val,其中target的值為數組或者對象,這正好和官網給出的調用Vue.set()方法時傳入的參數參數對應上。

Vue.set()和this.$set()的區別是什么

看完上述內容,你們掌握Vue.set()和this.$set()的區別是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安宁市| 廊坊市| 义乌市| 惠水县| 贺州市| 栖霞市| 鄂伦春自治旗| 那曲县| 昌乐县| 柘城县| 扎兰屯市| 会理县| 西乌珠穆沁旗| 徐水县| 莆田市| 开远市| 成安县| 盐城市| 阿坝| 昌黎县| 青阳县| 分宜县| 余干县| 平利县| 泸水县| 炎陵县| 金乡县| 象州县| 崇阳县| 肇庆市| 虞城县| 清流县| 台中市| 南溪县| 磐安县| 都兰县| 新蔡县| 塘沽区| 渝中区| 黎川县| 新沂市|