真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解析Vue中動態(tài)組件怎么使用

如何解析Vue中動態(tài)組件怎么使用,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為猇亭企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,猇亭網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

動態(tài)組件在開發(fā)的過程中大多數(shù)情況下都會用到,當我們需要在不同的組件之間進行狀態(tài)切換時,動態(tài)組件可以很好的滿足我們的需求,其中的核心是component標簽和is屬性的使用。


  child1
  child2
  child3
  
  
// js
var child1 = {
  template: '
content1
', } var child2 = {   template: '
content2
' } var child3 = {   template: '
content3
' } var vm = new Vue({   el: '#app',   components: {     child1,     child2,     child3   },   methods: {     changeTabs(tab) {       this.chooseTabs = tab;     }   } })

例子是一個動態(tài)組件的基本使用場景,當點擊按鈕時,視圖根據(jù)this.chooseTabs值在組件child1,child2,child3間切換。

AST解析

的解讀和前面幾篇內(nèi)容一致,會從AST解析階段說起,過程也不會專注每一個細節(jié),而是把和以往處理方式不同的地方特別說明。針對動態(tài)組件解析的差異,集中在processComponent上,由于標簽上is屬性的存在,它會在最終的ast樹上打上component屬性的標志。

//  針對動態(tài)組件的解析
function processComponent (el) {
  var binding;
  // 拿到is屬性所對應的值
  if ((binding = getBindingAttr(el, 'is'))) {
    // ast樹上多了component的屬性
    el.component = binding;
  }
  if (getAndRemoveAttr(el, 'inline-template') != null) {
    el.inlineTemplate = true;
  }
}

如何解析Vue中動態(tài)組件怎么使用

render函數(shù)

有了ast樹,接下來是根據(jù)ast樹生成可執(zhí)行的render函數(shù),由于有component屬性,render函數(shù)的產(chǎn)生過程會走genComponent分支。

// render函數(shù)生成函數(shù)
var code = generate(ast, options);

// generate函數(shù)的實現(xiàn)
function generate (ast,options) {
  var state = new CodegenState(options);
  var code = ast ? genElement(ast, state) : '_c("div")';
  return {
    render: ("with(this){return " + code + "}"),
    staticRenderFns: state.staticRenderFns
  }
}

function genElement(el, state) {
  ···
  var code;
  // 動態(tài)組件分支
  if (el.component) {
    code = genComponent(el.component, el, state);
  }
}

針對動態(tài)組件的處理邏輯其實很簡單,當沒有內(nèi)聯(lián)模板標志時(后面會講),拿到后續(xù)的子節(jié)點進行拼接,和普通組件唯一的區(qū)別在于,_c的第一個參數(shù)不再是一個指定的字符串,而是一個代表組件的變量

// 針對動態(tài)組件的處理
  function genComponent (
    componentName,
    el,
    state
  ) {
    // 擁有inlineTemplate屬性時,children為null
    var children = el.inlineTemplate ? null : genChildren(el, state, true);
    return ("_c(" + componentName + "," + (genData$2(el, state)) + (children ? ("," + children) : '') + ")")
  }

普通組件和動態(tài)組件的對比

"with(this){return _c('div',{attrs:{"id":"app"}},[_c('child1',[_v(_s(test))])],1)}"
動態(tài)組件的render函數(shù)
with(this){return _c('div',{attrs:{"id":"app"}},[_c(chooseTabs,{tag:"component"})],1)}

簡單的總結(jié),動態(tài)組件和普通組件的區(qū)別在于:

有了render函數(shù),接下來從vnode到真實節(jié)點的過程和普通組件在流程和思路上基本一致。

關(guān)于如何解析Vue中動態(tài)組件怎么使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


網(wǎng)站欄目:如何解析Vue中動態(tài)組件怎么使用
文章路徑:http://weahome.cn/article/pggsgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部