<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近遇到一個問題,就是通過LoadJs方法載入的元件怎麼通過component實現熱載入問題
vue的component標籤是個虛擬dom,在真實dom樹上需要vue進行渲染,顯示。而我最近遇到的問題,我通過LoadJS方法,從A專案讀取B專案的物件,頁面並已元件的形式渲染到A計畫頁面上,元件沒法渲染。
我第一反應 是this.$forceUpdate(),渲染一下就是,可是並沒有成功。
然後想到一個問題VUE如何識別載入虛擬DOM和如何識別路由裡繫結的頁面?import物件和require物件有什麼區別,什麼時候用
想了一堆這類的問題,實際上import和require的區別,好多文章都有說明,而且解釋的很好。個人看來最大的區別就是一個是靜態編譯和一個動態編譯。也就是一個指令碼執行完後編譯。
所以我這裡應該是動態編譯,因為外部Js檔案在是一個blob物件,無法根據import,指定路徑,執行時候在存取對應的Js檔案。也就是這個路徑是個虛擬的,無法真實找到的時候,不要用import。
require
是CommonJs的語法(AMD規範引入方式),CommonJs的模組是物件。import
是es6的一個語法標準(瀏覽器不支援,本質是使用node中的babel將es6轉碼為es5再執行,import會被轉碼為require),es6模組不是物件require
是執行時載入整個模組(即模組中所有方法),生成一個物件,再從物件上讀取它的方法(只有執行時才能得到這個物件,不能在編譯時做到靜態化),理論上可以用在程式碼的任何地方import
是編譯時呼叫,確定模組的依賴關係,輸入變數(es6模組不是物件,而是通過export命令指定輸出程式碼,再通過import輸入,只載入import中導的方法,其他方法不載入),import具有提升效果,會提升到模組的頭部(編譯時執行)export
和import
可以位於模組中的任何位置,但是必須是在模組頂層,如果在其他作用域內,會報錯這算解決了一個問題,可是component的Is屬性時可以識別require和import物件,我直接丟進去,可是還是不行。
然後注意到一個點,VUE的生命週期!
然後發現我實在mounted匯入的物件。。。。。。
提醒一下自己和看到的人,請不要在mounteds使用require和import,我改到created裡面執行函數就可以。理論來說beforeCreated和beforeMounted也可以使用。未嘗試過。
還有提醒一下,思考一個問題,不要鑽牛角尖,換個思路,說不定豁然開朗,就像我這個問題。其實主要問題就是,匯入物件的時期和匯入的方法選擇,而不是渲染。
因詳情頁面,有多個tab索引標籤考慮頁面多處重複使用,而且有多個頁面組成,最終決定使用 元件方式來參照頁面。
因 專案採用的UI元件是 element-ui,剛好看到有一個 樣式很類似於 tab索引標籤,就採用了 element的 tabs元件,可是 沒想到問題就是出現 這兒。
<el-tabs class="header-tabs" v-model="activeName" @tab-click="handleClick"> <el-tab-pane v-for="item of tabs" :key="item.id" :label="item.label" :name="item.id" :component="item.component" lazy > <keep-alive exclude="ContentManage"> <component :is="currentComponent" :customeroid="agencyid"></component> </keep-alive> </el-tab-pane> </el-tabs>
因為上述採用了 tabs索引標籤,而且也使用 v-for迴圈(沒辦法,主要是 tabs是動態的),導致 每個頁面不僅沒有辦法 快取,反而 一直重複傳送請求。自己百度了好久,最後沒辦法尋求幫助,在大佬們 遠端幫助下 最終發現的是 tabs下的 v-for導致。
因為 component 寫在v-for迴圈中,每次迴圈都會 建立一個 物件,導致建立很多的元件,點選一次tabs 迴圈後的 所有的 component都 傳送了請求,每次點選一次後,都會減少一次請求(因為 keep-alive快取的問題)。
最終解決的方法,不在 element-ui的 tabs元件,自己手寫頁面,反正樣式不復雜。
<ul class="tabs-ul"> <li v-for="(item) in currentTabs" :key="item.id" :class="{ active: tabSelect === item.id }" @click.prevent="changetabs(item.id)" > {{ item.label }} </li> </ul> <keep-alive exclude="ContentManage"> <component :is="currentComponent" :customeroid="agencyid"></component> </keep-alive>
這樣的就可以避免建立多個元件,從而不在出現 重複傳送請求的bug。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45