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

詳解vue為什么要求組件模板只能有一個根元素

 更新時間:2019年07月22日 08:28:02   作者:yang  
這篇文章主要介紹了vue為什么要求組件模板只能有一個根元素,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

我是在知乎上看到的這個問題,轉(zhuǎn)念一想,用了大半年的vue,好像真的沒有了解過:

‘為什么只能有且只有一個根元素'

于是我花了二十多分鐘去找了一下答案......竟然沒有找到答案....

好的現(xiàn)在我來說說我的理解,如果有不對的地方歡迎指出。

我覺得這個問題需要從兩個方面來說起:

1.new Vue({el:'#app'})

2.單文件組件中,template下的元素div

一、當(dāng)我們實例化Vue的時候,填寫一個el選項,來指定我們的SPA入口:

let vm = new Vue({

el:'#app'
})

同時我們也會在body里面新增一個id為app的div

<body>

<div id='app'></div>
</body>

這很好理解,就是為vue開啟一個入口,那我們不妨來想想,如果我在body下這樣

<body>

<div id='app1'></div>
<div id='app2'></div>
</body>

Vue其實并不知道哪一個才是我們的入口,因為對于一個入口來講,這個入口就是一個‘Vue類',Vue需要把這個入口里面的所有東西拿來渲染,處理,最后再重新插入到dom中。

如果同時設(shè)置了多個入口,那么vue就不知道哪一個才是這個‘類'。

二、當(dāng)我們在webpack搭建的vue開發(fā)環(huán)境下,使用單文件組件時,你可能會這樣:

<template>

<div class='component'></div>
</template>

那這里為什么template下也必須有且只能有一個div呢?

這里我們要先看一看template這個標(biāo)簽,這個標(biāo)簽是HTML5出來的新標(biāo)簽,它有三個特性:

1.隱藏性:該標(biāo)簽不會顯示在頁面的任何地方,即便里面有多少內(nèi)容,它永遠(yuǎn)都是隱藏的狀態(tài);

2.任意性:該標(biāo)簽可以寫在頁面的任何地方,甚至是head、body、sciprt標(biāo)簽內(nèi);

3.無效性:該標(biāo)簽里的任何HTML內(nèi)容都是無效的,不會起任何作用;

但是呢,你可以通過innerHTML來獲取到里面的內(nèi)容。

知道了這個,我們再來看.vue的單文件組件。其實本質(zhì)上,一個單文件組件,本質(zhì)上(我認(rèn)為)會被各種各樣的loader處理成為.js文件(因為當(dāng)你import一個單文件組件并打印出來的時候,是一個vue實例),通過template的任意性我們知道,template包裹的HTML可以寫在任何地方,那么對于一個.vue來講,這個template里面的內(nèi)容就是會被vue處理為虛擬dom并渲染的內(nèi)容,導(dǎo)致結(jié)果又回到了開始 :既然一個.vue單文件組件是一個vue實例,那么這個實例的入口在哪里?

如果在template下有多個div,那么該如何指定這個vue實例的根入口?

為了讓組件能夠正常的生成一個vue實例,那么這個div會被自然的處理成程序的入口。

通過這個‘根節(jié)點',來遞歸遍歷整個vue‘樹'下的所有節(jié)點,并處理為vdom,最后再渲染成真正的HTML,插入在正確的位置

那么這個入口,就是這個樹的‘根',各個子元素,子組件,就是這個樹的‘枝葉',而自然而然地,這棵‘樹',就是指一個vue實例了。

鏈接: https://github.com/haizlin/fe-interview/issues/457

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Element?UI?Upload?組件上傳圖片可刪除、預(yù)覽功能

    Element?UI?Upload?組件上傳圖片可刪除、預(yù)覽功能

    這篇文章主要介紹了Element?UI?Upload?組件?上傳圖片可刪除、預(yù)覽,設(shè)置只允許上傳單張?/?多張圖片的操作,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue3 開始時間與結(jié)束時間比較驗證(結(jié)束時間需要大于開始時間)

    vue3 開始時間與結(jié)束時間比較驗證(結(jié)束時間需要大于開始時間)

    本文通過示例代碼介紹了vue3 開始時間與結(jié)束時間比較驗證(結(jié)束時間需要大于開始時間)的相關(guān)操作,代碼簡單易懂,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 詳解vue 中使用 AJAX獲取數(shù)據(jù)的方法

    詳解vue 中使用 AJAX獲取數(shù)據(jù)的方法

    本篇文章主要介紹了詳解vue 中使用 AJAX獲取數(shù)據(jù)的方法,在VUE開發(fā)時,數(shù)據(jù)可以使用jquery和vue-resource來獲取數(shù)據(jù),有興趣的可以了解一下。
    2017-01-01
  • vue項目中使用vue-layer彈框插件的方法

    vue項目中使用vue-layer彈框插件的方法

    這篇文章主要介紹了vue項目中使用vue-layer彈框插件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • vue工程師必會封裝的埋點指令思路知識總結(jié)

    vue工程師必會封裝的埋點指令思路知識總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于vue工程師必會封裝的埋點指令思路知識,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-12-12
  • vue集成高德地圖amap-jsapi-loader的實現(xiàn)

    vue集成高德地圖amap-jsapi-loader的實現(xiàn)

    本文主要介紹了vue集成高德地圖amap-jsapi-loader的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 深入了解Vue中單向數(shù)據(jù)流的原理與管理

    深入了解Vue中單向數(shù)據(jù)流的原理與管理

    在Vue中,數(shù)據(jù)流是指數(shù)據(jù)的傳遞和管理方式,而Vue采用的是單向數(shù)據(jù)流,所以這篇文章就來就來和大家講講什么是Vue的數(shù)據(jù)流以及如何進(jìn)行數(shù)據(jù)流管理,感興趣的可以了解一下
    2023-06-06
  • 富文本編輯器quill.js開發(fā)之自定義格式擴展

    富文本編輯器quill.js開發(fā)之自定義格式擴展

    這篇文章主要為大家介紹了富文本編輯器quill.js開發(fā)之自定義格式擴展,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • vue2組件實現(xiàn)懶加載淺析

    vue2組件實現(xiàn)懶加載淺析

    本篇文章主要介紹了vue2組件實現(xiàn)懶加載淺析,運用懶加載則可以將頁面進(jìn)行劃分,需要的時候加載頁面,可以有效的分擔(dān)首頁所承擔(dān)的加載壓力.
    2017-03-03
  • vue3網(wǎng)絡(luò)請求添加loading過程

    vue3網(wǎng)絡(luò)請求添加loading過程

    這篇文章主要介紹了vue3網(wǎng)絡(luò)請求添加loading過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

天水市| 芜湖市| 岳阳市| 镇康县| 鄂托克旗| 雷山县| 呼玛县| 吴桥县| 沙洋县| 缙云县| 冕宁县| 安丘市| 泸溪县| 铜陵市| 尚义县| 岑巩县| 庆元县| 措美县| 东源县| 安阳县| 抚宁县| 大英县| 健康| 仁寿县| 齐河县| 略阳县| 柳州市| 台湾省| 邹城市| 台北市| 辽宁省| 沂南县| 阳谷县| 张家界市| 乌拉特前旗| 东乌珠穆沁旗| 澳门| 凉城县| 翁源县| 常德市| 邵东县|