鍍金池/ 問答/HTML/ vue.js單文件組件返回的是什么?

vue.js單文件組件返回的是什么?

學(xué)習(xí)研究vuejs的API,比如$children,竟然發(fā)現(xiàn)vuejs單文件組件返回的內(nèi)容沒有$children對象。

clipboard.png

打印的內(nèi)容是:

clipboard.png

沒有找到$children,好奇怪呀,難道

import App from './App.vue';

返回的App竟然不是vue實例對象?

不過,我反復(fù)測試,發(fā)現(xiàn):

clipboard.png

這里的vm竟然是標(biāo)準(zhǔn)的vue實例對象,返回的內(nèi)容為:

clipboard.png

我的天,完全顛覆我的認(rèn)知,請問vue的實例對象到底應(yīng)該怎么獲得,比如我就想獲得App.vue對應(yīng)的實例對象,怎么辦?vue.js好難學(xué)呀@尤雨溪,表哥幫忙看下!

回答
編輯回答
艷骨

.vue 文件其實解析出來是一個vue-component實例,vue-component實例model跟vue有本質(zhì)區(qū)別的,雖然作者在組件和vue的實例中都添加的生命周期鉤子,也只是為了,開發(fā)者能更好的掌握組件,提高可操作的粒度,這就是你為什么看不到$children 如果你的是SPA的話,你的項目中只有一個vue實例,就是項目的entry入口文件,也就是app.vue 有些cli定義為main.vue,把這個vue的實例看做是一顆樹,剩下所有的.vue文件是這棵樹的樹枝,通過相互引用,樹枝之間有通信,也可能是公共的樹枝,就構(gòu)成了一棵樹, 這樣就很好理解了。利用面向?qū)ο蟮姆绞絹砻枋鰳渲Ω枋鰳淇隙ㄊ遣灰粯拥模@也就是為什么你打印出來的東西不一樣。

2017年4月16日 06:46
編輯回答
尛憇藌

1.為什么你會認(rèn)為import導(dǎo)入的是實例對象
2.組件經(jīng)過注冊初始化才會成為實例對象,想獲得對應(yīng)vue的實例對象,應(yīng)該在實例化完成后,通過對應(yīng)位置使用this或者this.$children等節(jié)點獲取。
3.vm對象不應(yīng)該成為開發(fā)中關(guān)心的問題,應(yīng)盡可能避免這樣的操作,通過vm對象的操作不可靠(我YY的)

emmm..我也只是一知半解

2017年7月18日 02:37
編輯回答
執(zhí)念

圖片描述

你拿到的只是單文件組件經(jīng)過vue-loader處理后的JavaScript模塊而已。

2017年2月4日 13:32
編輯回答
祈歡

import進(jìn)來的就是你另一個頁面寫的,你打印的App還未寫入到vue實例里面去呢,你后面打印那個是new出來的vue對象當(dāng)然才是vue實例對象

2018年1月6日 17:30
編輯回答
陪我終

不好意思之前的理解得有些淺顯 重新回答一下
剛又看了看源碼,發(fā)現(xiàn)export出來的就是.vue文件經(jīng)過了vue-loader處理后的整理的options

而_Ctor屬性則是后面在調(diào)用Vue.extend添加的屬性

區(qū)別不是很大,源碼里Vue.extend方法里寫的很明白,在這里做了一層緩存,為options添加了_Ctor屬性,也是你第一個圖里特有的一個屬性,這個緩存的作用是為了以后如果接著使用Vue.extend方法傳入該options的時候可以直接返回之前繼承的一個構(gòu)造函數(shù),不用再次構(gòu)建

// global-api/extend.js
const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {})
    if (cachedCtors[SuperId]) {
      return cachedCtors[SuperId]
    }

你打印出來的東西并不是一個Vue Component的實例,也不是Vue的實例。單單只是一個options,傳入render函數(shù)后可以根據(jù)options進(jìn)行渲染,是沒有任何問題的。

研究Vue api只要分清什么是掛載在全局的API也就是Vue構(gòu)造函數(shù)上的方法和什么是實例的API也就是Vue.prototype的方法就可以清楚的研究了。

2018年9月4日 13:41
編輯回答
痞性

你可以理解為導(dǎo)入的是一個類,創(chuàng)建過程是vue自動創(chuàng)建的

2017年1月12日 11:15
編輯回答
賤人曾

單文件組件經(jīng) vue-loader 加載之后,生成的是 Vue 組件選項對象

2018年9月19日 14:12
編輯回答
愛礙唉

謝邀。

  • 單文件組件:所有的Vue實例都會被綁定到this上面。也就是說,在單文件組件里面你可以隨時打印this去看Vue的實例。當(dāng)然,路由加載之前的鉤子不是,Vue實例還未生成。但同樣可拿到(beforeRouteEnter)
  • 通過你這種聲明的方式,new Vue這就是一個Vue實例啊。打印聲明的變量當(dāng)然可以拿到。
2017年4月22日 04:57