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

Vue中.vue文件比main.js先執(zhí)行的問(wèn)題及解決

 更新時(shí)間:2022年12月08日 08:44:27   作者:scluis  
這篇文章主要介紹了Vue中.vue文件比main.js先執(zhí)行的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問(wèn)題

在main.js,App.vue和兩個(gè)子組件(A.vue和B.vue)中分別輸出語(yǔ)句,查看他們的加載順序:

main.js

import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false

new Vue({
? ? ? ? el: '#app',
? ? ? ? render: h => h(App),
? ? ? ? beforeCreate() {
? ? ? ? ? ? Vue.prototype.$bus = this //安裝全局事件總線(xiàn)
? ? ? ? },
? ? })
console.log('mainjs===============')

App.vue

<template>
?? ?<div >
?? ??? ?<A/>
?? ??? ?<B/>
?? ?</div>
</template>

<script>
?? ?import A from './components/A'
?? ?import B from './components/B'

?? ?export default {
?? ??? ?name:'App',
?? ??? ?components:{A,B},
?? ??? ?mounted(){
?? ??? ??? ?console.log('APP==================')
?? ??? ?}
?? ?}
</script>

A.vue

<template>
?? ?<div >
?? ?</div>
</template>

<script>
?? ?export default {
?? ??? ?name:'A',?? ??? ?
?? ??? ?mounted() {
?? ??? ??? ?console.log('A=============')
?? ??? ?}
?? ?}
</script>

B.vue

<template>
?? ?<div >
?? ?</div>
</template>

<script>
?? ?export default {
?? ??? ?name:'B',
?? ??? ?mounted() {
?? ??? ??? ?console.log('B==================')
?? ??? ?},
?? ?}
</script>

執(zhí)行結(jié)果:

在這里插入圖片描述

可以看到main.js理論上應(yīng)該是最先執(zhí)行的,但是結(jié)果卻正好相反。

解釋

Vue加載時(shí)的執(zhí)行順序如下

1、執(zhí)行index.html文件

2、執(zhí)行main.js文件

3、main.js掛載了app.vue文件,用app.vue的templete替換index.html中的<div id="app"></div>

4、main.js中注入了路由文件,將對(duì)應(yīng)的組件渲染到router-view中

5、router-view中加載Layout文件

6、Layout 加載Navbar, Sidebar, AppMain

main.js確實(shí)是最先執(zhí)行的,但是出現(xiàn)上述問(wèn)題的原因是ES6的模塊化加載規(guī)則。

ES6模塊化加載規(guī)則

ES6 模塊化的設(shè)計(jì)思想是盡量的靜態(tài)化,使得編譯時(shí)就能確定模塊的依賴(lài)關(guān)系,以及輸入和輸出的變量。

而CommonJS 和 AMD 模塊化,都只能在運(yùn)行時(shí)確定這些東西。比如,CommonJS 模塊就是對(duì)象,輸入時(shí)必須查找對(duì)象屬性。

// CommonJS模塊
let { stat, exists, readfile } = require('fs');

// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;

上面代碼的實(shí)質(zhì)是整體加載fs模塊(即加載fs的所有方法),生成一個(gè)對(duì)象(_fs),然后再?gòu)倪@個(gè)對(duì)象上面讀取 3 個(gè)方法。

這種加載稱(chēng)為“運(yùn)行時(shí)加載”,因?yàn)橹挥羞\(yùn)行時(shí)才能得到這個(gè)對(duì)象。

ES6 模塊化不是引入一個(gè)對(duì)象,而是通過(guò)export命令顯式指定輸出的代碼,再通過(guò)import命令輸入。

// ES6模塊
import { stat, exists, readFile } from 'fs';

上面代碼的實(shí)質(zhì)是從fs模塊加載 3 個(gè)方法,其他方法不加載。

我的理解是,ES6的模塊化規(guī)則類(lèi)似于cpp中的宏,在代碼編譯時(shí)進(jìn)行字符串替換,上述代碼使用import語(yǔ)句引入了 stat, exists, readFile 三個(gè)方法,那么在編譯時(shí),三個(gè)方法名其實(shí)已經(jīng)被替換成了方法代碼本身,存在于當(dāng)前模塊當(dāng)中,我們自然就可以使用引入的這些方法。

官方將這種加載稱(chēng)為“編譯時(shí)加載”或者靜態(tài)加載,即 ES6 可以在編譯時(shí)就完成模塊加載,效率要比 CommonJS 模塊的加載方式高。

原因

因?yàn)槭蔷幾g時(shí)加載,自然而然就存在編譯優(yōu)化。

import命令具有提升效果,會(huì)提升到整個(gè)模塊的頭部,首先執(zhí)行。

這也很好理解,我們引入了模塊,并使用模塊中的成員,那么當(dāng)然要先引入才能使用。

下面的代碼不會(huì)報(bào)錯(cuò),因?yàn)閕mport的執(zhí)行早于foo的調(diào)用。這種行為的本質(zhì)是,import命令是編譯階段執(zhí)行的,在代碼運(yùn)行之前。

foo();

import { foo } from 'my_module';

在main.js文件中,就算我們將import語(yǔ)句放到代碼最后,輸出結(jié)果也不會(huì)變,仍然是A->B->App>main.js。

Vue.config.productionTip = false

new Vue({
? ? ? ? el: '#app',
? ? ? ? render: h => h(App),
? ? ? ? beforeCreate() {
? ? ? ? ? ? Vue.prototype.$bus = this //安裝全局事件總線(xiàn)
? ? ? ? },
? ? })
console.log('mainjs===============')
import Vue from 'vue'
import App from './App.vue'

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于vue2.0的活動(dòng)倒計(jì)時(shí)組件countdown(附源碼下載)

    基于vue2.0的活動(dòng)倒計(jì)時(shí)組件countdown(附源碼下載)

    這是一款基于vue2.0的活動(dòng)倒計(jì)時(shí)組件,可以使用服務(wù)端時(shí)間作為當(dāng)前時(shí)間,在倒計(jì)時(shí)開(kāi)始和結(jié)束時(shí)可以自定義回調(diào)函數(shù)。這篇文章主要介紹了基于vue2.0的活動(dòng)倒計(jì)時(shí)組件countdown,需要的朋友可以參考下
    2018-10-10
  • 如何使用ant-design-vue的Table組件

    如何使用ant-design-vue的Table組件

    這篇文章主要介紹了如何使用ant-design-vue的Table組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue.js在數(shù)組中插入重復(fù)數(shù)據(jù)的實(shí)現(xiàn)代碼

    Vue.js在數(shù)組中插入重復(fù)數(shù)據(jù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Vue.js在數(shù)組中插入重復(fù)數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-11-11
  • 基于Vue+Echart繪制動(dòng)態(tài)圖

    基于Vue+Echart繪制動(dòng)態(tài)圖

    這篇文章主要給大家介紹了基于Vue+Echart的動(dòng)態(tài)圖繪制,用戶(hù)需要展示他的數(shù)據(jù)庫(kù)是有哪個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)化的,需要展示數(shù)據(jù)庫(kù)的軌跡圖,前導(dǎo)庫(kù)的關(guān)系圖,文中有詳細(xì)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-10-10
  • 使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò)

    使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò)

    本文主要介紹了使用Elemen加上lang=“ts“后編譯報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 解決vue admin element noCache設(shè)置無(wú)效的問(wèn)題

    解決vue admin element noCache設(shè)置無(wú)效的問(wèn)題

    今天小編就為大家分享一篇解決vue admin element noCache設(shè)置無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Vue項(xiàng)目中如何配置src文件下的@別名

    Vue項(xiàng)目中如何配置src文件下的@別名

    這篇文章主要介紹了Vue項(xiàng)目中如何配置src文件下的@別名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • VueQuillEditor富文本上傳圖片(非base64)

    VueQuillEditor富文本上傳圖片(非base64)

    這篇文章主要介紹了VueQuillEditor富文本上傳圖片(非base64),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能

    vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能,截取圖片的一部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能

    vue實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論

洛隆县| 夏邑县| 崇阳县| 潢川县| 鄄城县| 固镇县| 嘉义市| 翼城县| 保亭| 徐州市| 安仁县| 屏南县| 故城县| 葵青区| 阳新县| 五大连池市| 广丰县| 乐昌市| 武安市| 理塘县| 定州市| 青神县| 定远县| 社旗县| 巴青县| 徐州市| 麻栗坡县| 渭源县| 杂多县| 南宫市| 彰化县| 兰坪| 井陉县| 磴口县| 墨竹工卡县| 津南区| 米林县| 安塞县| 富宁县| 十堰市| 黔东|