日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
vue開(kāi)發(fā)必須知道的九大秘法

 require.context()
在實(shí)際開(kāi)發(fā)中,絕大部分人都是以組件化的方式進(jìn)行開(kāi)發(fā)。隨之而來(lái)就有了許多的組件需要引入。比如以下場(chǎng)景:

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供南靖網(wǎng)站建設(shè)、南靖做網(wǎng)站、南靖網(wǎng)站設(shè)計(jì)、南靖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、南靖企業(yè)網(wǎng)站模板建站服務(wù),十年南靖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

 
 
 
  1. import outExperInfo from "@/components/userInfo/outExperInfo"; 
  2. import baseUserInfo from "@/components/userInfo/baseUserInfo"; 
  3. import technicalExperInfo from "@/components/userInfo/technicalExperInfo"; 
  4. import skillExperInfo from "@/components/userInfo/skillExperInfo"; 
  5.  
  6. components:{ 
  7.     outExperInfo, 
  8.     baseUserInfo, 
  9.     technicalExperInfo, 
  10.     skillExperInfo 

這樣寫(xiě)并沒(méi)有錯(cuò),但是仔細(xì)觀察發(fā)現(xiàn)寫(xiě)了很多重復(fù)的代碼,這個(gè)時(shí)候利用require.context()可以寫(xiě)成:

 
 
 
  1. const path = require('path') 
  2. const files = require.context('@/components/userInfo', false, /\.vue$/) 
  3. const userComponents = {} 
  4. files.keys().forEach(key => { 
  5.  const name = path.basename(key, '.vue') 
  6.  userComponents[name] = files(key).default || files(key) 
  7. }) 
  8. components:userComponents 

這樣不管需要引入多少組件,都可以使用這一個(gè)方法。

路由的按需加載
隨著項(xiàng)目功能模塊的增加,引入的文件數(shù)量劇增。如果不做任何處理,那么首屏加載會(huì)相當(dāng)?shù)木徛?,這個(gè)時(shí)候,路由按需加載就閃亮登場(chǎng)了。

 
 
 
  1. webpack< 2.4 時(shí) 
  2.  path:'/', 
  3.  name:'home', 
  4.  components:resolve=>require(['@/components/home'],resolve) 
  5.   
  6. webpack> 2.4 時(shí) 
  7.  path:'/', 
  8.  name:'home', 
  9.  components:()=>import('@/components/home') 

import()方法是由es6提出的,動(dòng)態(tài)加載返回一個(gè)Promise對(duì)象,then方法的參數(shù)是加載到的模塊。類似于Node.js的require方法,主要import()方法是異步加載的。

動(dòng)態(tài)組件
場(chǎng)景:如果項(xiàng)目中有tab切換的需求,那么就會(huì)涉及到組件動(dòng)態(tài)加載,一般寫(xiě)法如下:

 
 
 
  1.  

這樣寫(xiě)也沒(méi)有錯(cuò),但是如果這樣寫(xiě)的話,每次切換的時(shí)候,當(dāng)前組件都會(huì)銷毀并且重新加載下一個(gè)組件。會(huì)消耗大量的性能,所以就起到了作用。

 
 
 
  1.  
  2.   
  3.  

有的小伙伴會(huì)說(shuō),這樣切換雖然不消耗性能了,但是切換效果沒(méi)有動(dòng)畫(huà)效果了,別著急,這時(shí)可以利用內(nèi)置的。

 
 
 
  1.  
  2.  
  3.   
  4.  
  5.  

components和vue.component
前者是局部注冊(cè)組件,用法如下:

 
 
 
  1. export default{ 
  2.  components:{home} 

后者是全局注冊(cè)組件,主要針對(duì)一些全局使用的組件,用法如下:

 
 
 
  1. Vue.component('home',home) 

Vue.nextTick
Vue.nextTick()方法在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào),因此可以頁(yè)面更新加載完畢之后再執(zhí)行回調(diào)函數(shù)。下面介紹幾個(gè)常用場(chǎng)景:

場(chǎng)景一

 
 
 
  1.  
  2.  

因?yàn)檫@個(gè)時(shí)候created階段dom并未完全渲染完成,所以獲取值為undefined,我們對(duì)其改造一下:

 
 
 
  1.  
  2.  

這樣就可以獲取到dom了。

場(chǎng)景二

 
 
 
  1.  
  2.  

因?yàn)檫@個(gè)時(shí)候雖然visible的值為true,但是頁(yè)面dom并沒(méi)有更新完成,所以獲取值為undefined,我們對(duì)其改造一下:

 
 
 
  1.  
  2.  

這樣就可以獲取到dom了。

Vue.directive
場(chǎng)景:官方給我們提供了很多指令,但是我們?nèi)绻雽⑽淖肿兂芍付ǖ念伾x成指令使用,這個(gè)時(shí)候就需要用到Vue.directive,示例如下:

 
 
 
  1. // 全局定義 
  2. Vue.directive("change-color",function(el,binding,vnode){ 
  3.  el.style["color"]= binding.value; 
  4. }) 
  5.   
  6. // 使用 
  7.  
  8.  

Vue.set()
當(dāng)在項(xiàng)目中直接設(shè)置數(shù)組的某一項(xiàng)的值,或者直接設(shè)置對(duì)象的某個(gè)屬性值,這個(gè)時(shí)候,你會(huì)發(fā)現(xiàn)頁(yè)面并沒(méi)有更新。這是因?yàn)镺bject.defineprototype()限制,監(jiān)聽(tīng)不到變化,具體的可以查看我的另一篇文章:

vue對(duì)象數(shù)組數(shù)據(jù)變化,頁(yè)面不渲染

事件修飾符

  • .stop:阻止冒泡
  • .prevent:阻止默認(rèn)行為
  • .self:僅綁定元素自身觸發(fā)
  • .once: 2.1.4 新增,只觸發(fā)一次
  • passive: 2.3.0 新增,滾動(dòng)事件的默認(rèn)行為 (即滾動(dòng)行為) 將會(huì)立即觸發(fā),不能和.prevent 一起使用
  • .sync 修飾符

從 2.3.0 起vue重新引入了 .sync 修飾符,但是這次它只是作為一個(gè)編譯時(shí)的語(yǔ)法糖存在。它會(huì)被擴(kuò)展為一個(gè)自動(dòng)更新父組件屬性的 v-on 監(jiān)聽(tīng)器。示例代碼如下:

 
 
 
  1.  

會(huì)被擴(kuò)展為:

 
 
 
  1.  bar = val"> 

當(dāng)子組件需要更新 foo 的值時(shí),它需要顯式地觸發(fā)一個(gè)更新事件:

 
 
 
  1. this.$emit('update:foo', newValue) 

長(zhǎng)列表性能優(yōu)化(數(shù)據(jù)凍結(jié))
眾所周知,vue會(huì)通過(guò)object.defineProperty對(duì)數(shù)據(jù)進(jìn)行劫持,進(jìn)而實(shí)現(xiàn)頁(yè)面實(shí)時(shí)相應(yīng)數(shù)據(jù)的變化,然而我們有些時(shí)候,需要的僅僅就是純粹的展示數(shù)據(jù),因?yàn)閿?shù)據(jù)不會(huì)有任何改變,我們就不需要vue來(lái)劫持我們的數(shù)據(jù)。在數(shù)據(jù)量很大的情況下,這可以很明顯的減少加載時(shí)間。

那么如何實(shí)現(xiàn)禁止vue劫持我們的數(shù)據(jù)尼?可以通過(guò)object.freeze方法來(lái)凍結(jié)數(shù)據(jù),凍結(jié)之后數(shù)據(jù)也就不能再修改了。示例如下:

 
 
 
  1. let longList = [ 
  2.     {name:'monkeysoft'}, 
  3.     ... 
  4. this.longList = Object.freeze(longList) 

當(dāng)前題目:vue開(kāi)發(fā)必須知道的九大秘法
URL鏈接:http://m.5511xx.com/article/dhsiido.html