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

為vue中的data賦值computed計(jì)算屬性后,出現(xiàn)undefined原因及解決

 更新時(shí)間:2023年07月04日 09:00:07   作者:啊啊怪  
這篇文章主要介紹了為vue中的data賦值computed計(jì)算屬性后,出現(xiàn)undefined原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

為vue中的data賦值computed計(jì)算屬性后,出現(xiàn)undefined原因

今天遇到一個(gè)問題,當(dāng)我給data數(shù)據(jù)初始化一個(gè)computed計(jì)算屬性時(shí),在頁面上竟然沒有顯示,放代碼

<template>
  <div class="container">
    <div>num1:{{num1}}</div>
    <div>num2:{{num2}}</div>
    <div>data中的數(shù)據(jù){{sum}}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      num1:2,
      num2:10,
      sum:this.result
    };
  },
  computed:{
    result(){
      return this.num1+this.num2
    }
  }
};
</script>

console.log(this.data)一下,結(jié)果是undefined

查了一下資料,原來是跟Vue組件數(shù)據(jù)初始化順序有關(guān),我們可以看一下源碼new Vue的執(zhí)行順序

往下找,可以找到在這個(gè)initMixin函數(shù)里,定義了_init的方法

function initMixin (Vue) {
    Vue.prototype._init = function (options) {	//在這里定義了_init方法
      var vm = this;
      // a uid
      vm._uid = uid$3++;
      var startTag, endTag;
      /* istanbul ignore if */
      if (config.performance && mark) {
        startTag = "vue-perf-start:" + (vm._uid);
        endTag = "vue-perf-end:" + (vm._uid);
        mark(startTag);
      }
      // a flag to avoid this being observed
      vm._isVue = true;
      // merge options
      if (options && options._isComponent) {
        // optimize internal component instantiation
        // since dynamic options merging is pretty slow, and none of the
        // internal component options needs special treatment.
        initInternalComponent(vm, options);
      } else {
        vm.$options = mergeOptions(
          resolveConstructorOptions(vm.constructor),
          options || {},
          vm
        );
      }
      /* istanbul ignore else */
      {
        initProxy(vm);
      }
      // expose real self
      vm._self = vm;
      initLifecycle(vm);
      initEvents(vm);
      initRender(vm);
      callHook(vm, 'beforeCreate');
      initInjections(vm); // resolve injections before data/props
      initState(vm);
      initProvide(vm); // resolve provide after data/props
      callHook(vm, 'created');
      /* istanbul ignore if */
      if (config.performance && mark) {
        vm._name = formatComponentName(vm, false);
        mark(endTag);
        measure(("vue " + (vm._name) + " init"), startTag, endTag);
      }
      if (vm.$options.el) {
        vm.$mount(vm.$options.el);
      }
    };
  }

其中,聚焦在這里

看來initState(vm)是關(guān)鍵的部分了,在initState函數(shù)里

function initState (vm) {
    vm._watchers = [];
    var opts = vm.$options;
    if (opts.props) { initProps(vm, opts.props); }//初始化props
    if (opts.methods) { initMethods(vm, opts.methods); }//初始化methods
    if (opts.data) {
      initData(vm);
    } else {
      observe(vm._data = {}, true /* asRootData */);
    }	//初始化data
    if (opts.computed) { initComputed(vm, opts.computed); }//初始化computed
    if (opts.watch && opts.watch !== nativeWatch) {
      initWatch(vm, opts.watch);//初始化watch
    }
  }

initState(vm)函數(shù)可以看出

初始化數(shù)據(jù)的順序如下

  • props
  • methods
  • data
  • computed
  • watch

computed的初始化在data的后邊!

這也就證實(shí)了為什么為data賦值計(jì)算屬性computed時(shí),data打印出來是undefined

回到上邊的例子

<template>
  <div class="container">
    <div>num1:{{num1}}</div>
    <div>num2:{{num2}}</div>
    <div>data中的數(shù)據(jù){{sum}}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      num1:2,
      num2:10,
      sum:this.result
    };
  },
  computed:{
    result(){
      return this.num1+this.num2
    }
  }
};
</script>

因?yàn)?code>computed初始化順序是在data后邊。

當(dāng)sum初始化的時(shí)候,result還沒有初始化,所以也就輸出undefined的結(jié)果

總結(jié)

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

相關(guān)文章

  • 詳解如何實(shí)現(xiàn)一個(gè)簡單的 vuex

    詳解如何實(shí)現(xiàn)一個(gè)簡單的 vuex

    本篇文章主要介紹了如何實(shí)現(xiàn)一個(gè)簡單的 vuex,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • vue created鉤子函數(shù)與mounted鉤子函數(shù)的用法區(qū)別

    vue created鉤子函數(shù)與mounted鉤子函數(shù)的用法區(qū)別

    這篇文章主要介紹了vue created鉤子函數(shù)與mounted鉤子函數(shù)的用法區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue.js 子組件無法獲取父組件store值的解決方式

    vue.js 子組件無法獲取父組件store值的解決方式

    今天小編就為大家分享一篇vue.js 子組件無法獲取父組件store值的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • element跨分頁操作選擇詳解

    element跨分頁操作選擇詳解

    這篇文章主要為大家詳細(xì)介紹了element跨分頁操作選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • vue使用Echarts設(shè)置數(shù)據(jù)無效問題記錄及解決方法

    vue使用Echarts設(shè)置數(shù)據(jù)無效問題記錄及解決方法

    這篇文章主要介紹了vue使用Echarts設(shè)置數(shù)據(jù)無效問題記錄,本文通過場景分析給大家分享解決方法,需要的朋友可以參考下
    2022-08-08
  • vue使用websocket及封裝過程

    vue使用websocket及封裝過程

    這篇文章主要介紹了vue使用websocket及封裝過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue首屏加載出現(xiàn)白屏問題的優(yōu)化實(shí)戰(zhàn)

    Vue首屏加載出現(xiàn)白屏問題的優(yōu)化實(shí)戰(zhàn)

    在實(shí)際開發(fā)中,Vue?應(yīng)用首次加載時(shí)經(jīng)常出現(xiàn)白屏問題,這嚴(yán)重影響了用戶體驗(yàn),本文將從多個(gè)角度出發(fā),提供全面的解決方案,大家可以根據(jù)需要進(jìn)行選擇
    2025-05-05
  • Vue3實(shí)現(xiàn)預(yù)覽PDF文件的多種方式(超簡單)

    Vue3實(shí)現(xiàn)預(yù)覽PDF文件的多種方式(超簡單)

    在Vue項(xiàng)目中實(shí)現(xiàn)PDF文件預(yù)覽是許多開發(fā)者可能會(huì)遇到的需求,尤其是在開發(fā)海外后臺(tái)管理系統(tǒng)時(shí),由于某些用戶上傳的文件格式為PDF,而Vue本身并不直接支持PDF文件的預(yù)覽功能,這就需要借助一些第三方的插件或者工具來完成,下面詳細(xì)地介紹幾種在Vue3中實(shí)現(xiàn)PDF文件預(yù)覽的方法
    2025-03-03
  • Vue中util的工具函數(shù)實(shí)例詳解

    Vue中util的工具函數(shù)實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹了Vue中util的工具函數(shù),代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 教你用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果

    教你用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果

    最近做的兩個(gè)項(xiàng)目都是關(guān)于vue的,做完整理一下,這篇文章主要給大家介紹了關(guān)于如何用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論

南部县| 富源县| 浪卡子县| 同德县| 海门市| 宽甸| 龙州县| 德江县| 鄯善县| 遂宁市| 竹溪县| 阿城市| 宜丰县| 赫章县| 永川市| 丹阳市| 侯马市| 娄底市| 阿勒泰市| 双流县| 石屏县| 从江县| 永胜县| 迁西县| 清水河县| 漯河市| 五寨县| 长春市| 渭源县| 新晃| 平定县| 庄河市| 嘉鱼县| 鄢陵县| 沂水县| 根河市| 格尔木市| 剑河县| 霍城县| 都匀市| 视频|