真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司為您提適合企業(yè)的網(wǎng)站設(shè)計(jì)?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競(jìng)爭(zhēng)力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計(jì)及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站建設(shè)、做網(wǎng)站, 我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。

1 在動(dòng)態(tài)組件上使用 keep-alive

我們之前曾經(jīng)在一個(gè)多標(biāo)簽的界面中使用 is 特性來(lái)切換不同的組件:

當(dāng)在這些組件之間切換的時(shí)候,你有時(shí)會(huì)想保持這些組件的狀態(tài),以避免反復(fù)重渲染導(dǎo)致的性能問(wèn)題。例如我們來(lái)展開(kāi)說(shuō)一說(shuō)這個(gè)多標(biāo)簽界面:

Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件

你會(huì)注意到,如果你選擇了一篇文章,切換到 Archive 標(biāo)簽,然后再切換回 Posts,是不會(huì)繼續(xù)展示你之前選擇的文章的。這是因?yàn)槟忝看吻袚Q新標(biāo)簽的時(shí)候,Vue 都創(chuàng)建了一個(gè)新的 currentTabComponent 實(shí)例。

重新創(chuàng)建動(dòng)態(tài)組件的行為通常是非常有用的,但是在這個(gè)案例中,我們更希望那些標(biāo)簽的組件實(shí)例能夠被在它們第一次被創(chuàng)建的時(shí)候緩存下來(lái)。為了解決這個(gè)問(wèn)題,我們可以用一個(gè) 元素將其動(dòng)態(tài)組件包裹起來(lái)。



 

現(xiàn)在這個(gè) Posts 標(biāo)簽保持了它的狀態(tài) (被選中的文章) 甚至當(dāng)它未被渲染時(shí)也是如此。

html:


  
  
    
  

js:

Vue.component('tab-posts', {
  data: function () {
    return {
      posts: [
        {
          id: 1,
          title: '趕在618前夕,微信更新了兩個(gè)支付與電商功能',
          content: '本周末,中國(guó)消費(fèi)者即將迎來(lái)上半年大的消費(fèi)網(wǎng)購(gòu)峰值,6月17日父親節(jié),6月18日端午節(jié),也是京東、天貓等電商的618購(gòu)物節(jié)。略微出人意料但又在情理之中的是,中國(guó)大的社交平臺(tái)微信,近日密集上線了兩個(gè)與支付和電商相關(guān)的功能。'
        },
        {
          id: 2,
          title: '騰訊要花32億收購(gòu)《絕地求生》開(kāi)發(fā)商10%股份',
          content: '目前騰訊和藍(lán)洞已經(jīng)接近達(dá)成協(xié)議,如果交易成功,騰訊將成為藍(lán)洞的第二大股東。'
        },
        {
          id: 3,
          title: '這兩個(gè)地球之眼是真的嗎?形成原因至今仍是謎團(tuán)',
          content: '一名俄羅斯男子乘坐直升機(jī)游覽時(shí),經(jīng)過(guò)俄羅斯薩哈林島(庫(kù)頁(yè)島)時(shí),看到一個(gè)巨大的坑洞。地球上坑坑洞洞很多,本該不用大驚小怪。但當(dāng)飛機(jī)離得更近,換了個(gè)角度看這個(gè)坑時(shí),他震驚了,這分明就是“地球的眼睛”。'
        }
      ],
      selectedPost: null
    }
  },
  template: `
    
      
        
  •           {{ post.title }}         
  •                       
              

    {{ selectedPost.title }}

              
            
                       請(qǐng)點(diǎn)擊某個(gè)標(biāo)簽頁(yè)                
           ` }); Vue.component('tab-archive', {   template: '
    archive 頁(yè)面
    ' }); new Vue({   el: '#dynamic-component-demo',   data: {     currentTab: 'Posts',     tabs: ['Posts', 'Archive']   },   computed: {     currentTabComponent: function () {       return 'tab-' + this.currentTab.toLowerCase();     }   } });

    css:

    .tab-button {
      padding: 6px 10px;
      border-top-left-radius: 3px;
      border-top-right-radius: 3px;
      border: 1px solid #ccc;
      cursor: pointer;
      background: #f0f0f0;
      margin-bottom: -1px;
      margin-right: -1px;
    }
    .tab-button:hover {
      background: #e0e0e0;
    }
    .tab-button.active {
      background: #e0e0e0;
    }
    .tab {
      border: 1px solid #ccc;
      padding: 10px;
    }
    .posts-tab {
      display: flex;
    }
    .posts-sidebar {
      max-width: 40vw;
      margin: 0;
      padding: 0 10px 0 0;
      list-style-type: none;
      border-right: 1px solid #ccc;
    }
    .posts-sidebar li {
      white-space: nowrap;
      text-overflow: ellipsis;
      overflow: hidden;
      cursor: pointer;
    }
    .posts-sidebar li:hover {
      background: #eee;
    }
    .posts-sidebar li.selected {
      background: lightblue;
    }
    .selected-post-container {
      padding-left: 10px;
    }
    .selected-post > :first-child {
      margin-top: 0;
      padding-top: 0;
    }

    效果:

    Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件

    2 異步組件

    在大型應(yīng)用中,我們可能需要將應(yīng)用分割成小一些的代碼塊,并且只在需要的時(shí)候才從服務(wù)器加載一個(gè)模塊。為了簡(jiǎn)化,Vue 允許你以一個(gè)工廠函數(shù)的方式定義你的組件,這個(gè)工廠函數(shù)會(huì)異步解析你的組件定義。Vue 只有在這個(gè)組件需要被渲染的時(shí)候才會(huì)被觸發(fā),且會(huì)把結(jié)果緩存起來(lái)供未來(lái)重渲染。例如:

    Vue.component('async-example', function (resolve, reject) {
      setTimeout(function () {
        //在此定義組件
        resolve({
          template: `
            
              我是異步加載的哦         
          `     })   }, 1000); });

    如你所見(jiàn),這個(gè)工廠函數(shù)會(huì)收到一個(gè) resolve 回調(diào),這個(gè)回調(diào)函數(shù)會(huì)在你從服務(wù)器得到組件定義的時(shí)候被調(diào)用。你也可以調(diào)用 reject(reason) 來(lái)表示加載失敗。這里的 setTimeout 是為了演示用的,如何獲取組件取決于你自己。一個(gè)推薦的做法是將異步組件和 webpack 的 code-splitting 功能 一起配合使用:

    Vue.component('async-webpack-example', function (resolve) {
     // 這個(gè)特殊的 `require` 語(yǔ)法將會(huì)告訴 webpack
     // 自動(dòng)將你的構(gòu)建代碼切割成多個(gè)包,這些包
     // 會(huì)通過(guò) Ajax 請(qǐng)求加載
     require(['./my-async-component'], resolve)
    })

    你也可以在工廠函數(shù)中返回一個(gè) Promise,所以把 webpack 2 和 ES2015 語(yǔ)法加在一起,我們可以寫(xiě)成這樣:

    Vue.component(
     'async-webpack-example',
     // 這個(gè) `import` 函數(shù)會(huì)返回一個(gè) `Promise` 對(duì)象。
     () => import('./my-async-component')
    )

    當(dāng)使用局部注冊(cè)的時(shí)候,你也可以直接提供一個(gè)返回 Promise 的函數(shù):

    new Vue({
     // ...
     components: {
      'my-component': () => import('./my-async-component')
     }
    })

    如果你是一個(gè) Browserify 用戶同時(shí)喜歡使用異步組件,很不幸這個(gè)工具的作者明確表示異步加載“并不會(huì)被 Browserify 支持”,至少官方不會(huì)。Browserify 社區(qū)已經(jīng)找到了一些變通方案,這些方案可能會(huì)對(duì)已存在的復(fù)雜應(yīng)用有幫助。對(duì)于其它的場(chǎng)景,我們推薦直接使用 webpack,以擁有內(nèi)建的被作為第一公民的異步支持。

    處理加載狀態(tài)

    2.3.0+ 新增

    這里的異步組件工廠函數(shù)也可以返回一個(gè)如下格式的對(duì)象:

    const AsyncComponent = () => ({
     // 需要加載的組件 (應(yīng)該是一個(gè) `Promise` 對(duì)象)
     component: import('./MyComponent.vue'),
     // 異步組件加載時(shí)使用的組件
     loading: LoadingComponent,
     // 加載失敗時(shí)使用的組件
     error: ErrorComponent,
     // 展示加載時(shí)組件的延時(shí)時(shí)間。默認(rèn)值是 200 (毫秒)
     delay: 200,
     // 如果提供了超時(shí)時(shí)間且組件加載也超時(shí)了,
     // 則使用加載失敗時(shí)使用的組件。默認(rèn)值是:`Infinity`
     timeout: 3000
    })

    以上就是Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


    名稱欄目:Vue中怎么實(shí)現(xiàn)動(dòng)態(tài)組件與異步組件-創(chuàng)新互聯(lián)
    URL網(wǎng)址:http://weahome.cn/article/ihcji.html

    其他資訊

    在線咨詢

    微信咨詢

    電話咨詢

    028-86922220(工作日)

    18980820575(7×24)

    提交需求

    返回頂部