vue中的el

el我們應(yīng)該都不陌生,從我們開始學(xué)習(xí)vue開始做練習(xí)時應(yīng)該都會用到

 <div id="app">
        {{foo}}
    </div>
    <script>
        const app = new Vue({
            el: '#app',
            data() {
                return {
                    foo: 'hello vue'
                }
            }
        })
    </script>

但是我們真的了解他嗎?
其實vue官網(wǎng)有詳細(xì)的介紹

el

  • 類型string | Element
  • 限制:只在用 new 創(chuàng)建實例時生效。
  • 詳細(xì)
    (注意)提供一個在頁面上已存在的 DOM 元素作為 Vue 實例的掛載目標(biāo)。可以是 CSS 選擇器,也可以是一個 HTMLElement 實例。
    在實例掛載之后,元素可以用 vm.$el 訪問。
    如果在實例化時存在這個選項,實例將立即進(jìn)入編譯過程,否則,需要顯式調(diào)用 vm.$mount() 手動開啟編譯。
    提供的元素只能作為掛載點。不同于 Vue 1.x,所有的掛載元素會被 Vue 生>成的 DOM 替換。因此不推薦掛載 root 實例到 <html> 或者 <body> 上。
    如果 render 函數(shù)和 template property 都不存在,掛載 DOM 元素的 HTML 會被提取出來用作模板,此時,必須使用 Runtime + Compiler 構(gòu)建的 Vue 庫。

如上所述:el可以是一個字符串,也可以是一個dom

<div>{{foo}}</div>
<script>
        /*
        el: string | Element
        */
        const app = new Vue({
            el: document.querySelector('div'),
            // el: '#app',
            data() {
                return {
                    foo: 'dsads'
                }
            }
        })
    </script>

從源碼中可以找到答案

/*src/platforms/web/entry-runtime-with-compiler.js*/
const mount = Vue.prototype.$mount
Vue.prototype.$mount = function (
  el?: string | Element,
  hydrating?: boolean
): Component {
/*query*/
  el = el && query(el)

  /* istanbul ignore if */
  if (el === document.body || el === document.documentElement) {
    process.env.NODE_ENV !== 'production' && warn(
      `Do not mount Vue to <html> or <body> - mount to normal elements instead.`
    )
    return this
  }
/*src/platforms/web/util/index.js*/
export function query (el: string | Element): Element {
  if (typeof el === 'string') {
// 如果是string 則獲取dom元素
    const selected = document.querySelector(el)
    if (!selected) {
      process.env.NODE_ENV !== 'production' && warn(
        'Cannot find element: ' + el
      )
      return document.createElement('div')
    }
    return selected
  } else {
// 否則 直接使用
    return el
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 完整版推薦在線閱讀 https://interview2.poetries.top/[https://interv...
    前端進(jìn)階之旅閱讀 3,665評論 2 20
  • 相關(guān)概念 混合開發(fā)和前后端分離 混合開發(fā)(服務(wù)器端渲染) 前后端分離后端提供接口,前端開發(fā)界面效果(專注于用戶的交...
    他愛在黑暗中漫游閱讀 3,025評論 4 45
  • Vue.js面試題整理 一、什么是MVVM? MVVM是Model-View-ViewModel的縮寫。MVVM是...
    裘馬輕狂大帥閱讀 636評論 0 3
  • 指令 指令 (Directives) 是帶有 v- 前綴的特殊特性。指令特性的值預(yù)期是單個 JavaScript ...
    S_fe5c閱讀 299評論 0 0
  • el 類型:string | Element 限制:只在用new創(chuàng)建實例時生效。 詳細(xì): 提供一個在頁面上已存在的...
    JK丶帝閱讀 374評論 0 0

友情鏈接更多精彩內(nèi)容