組合模式

組合模式

  • vue2中的createElement()
// @returns {VNode}
createElement(
  // {String | Object | Function}
  // 一個 HTML 標簽名、組件選項對象,或者
  // resolve 了上述任何一種的一個 async 函數(shù)。必填項。
  'div',

  // {Object}
  // 一個與模板中 attribute 對應的數(shù)據(jù)對象??蛇x。
  {
    // (詳情見下一節(jié))
  },

  // {String | Array}
  // 子級虛擬節(jié)點 (VNodes),由 `createElement()` 構建而成,
  // 也可以使用字符串來生成“文本虛擬節(jié)點”。可選。
  [
    '先寫一些文字',
    createElement('h1', '一則頭條'),
    createElement(MyComponent, {
      props: {
        someProp: 'foobar'
      }
    })
  ]
)
function createElement(tag, attr, children) {
  const element = document.createElement(tag)
  if (typeof children === undefined) {
    children = attr
  } else {
    for (let i in attr) {
      element.setAttribute(i, attr[i])
    }
  }
  if (typeof children === 'string') {
    const textNode = document.createTextNode(children)
    element.appendChild(textNode)
  } else {
    children.forEach(item => {
      if (typeof item === 'string') {
        item = document.createTextNode(item)
      }
      element.appendChild(item)
    })
  }
  return element
}
const body = document.querySelector('body')
body.appendChild(createElement(
    'div', 
    { class: 'box' }, 
    [
      'hello universe', 
      createElement('a', { href: 'www.baidu.com' }, '百度')
    ]
  )
)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容