色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

深入了解Vue動(dòng)態(tài)組件和異步組件

瀏覽:12日期:2022-10-08 15:44:06
1.動(dòng)態(tài)組件

<!DOCTYPE html><html><head> <meta charset='utf-8'> <style>#app {font-size: 0}.dynamic-component-demo-tab-button {padding: 6px 10px;border-top-left-radius: 3px;border-top-right-radius: 3px;border: 1px solid #ccc;cursor: pointer;margin-bottom: -1px;margin-right: -1px;background: #f0f0f0;}.dynamic-component-demo-tab-button.dynamic-component-demo-active {background: #e0e0e0;}.dynamic-component-demo-tab-button:hover {background: #e0e0e0;}.dynamic-component-demo-posts-tab {display: flex;}.dynamic-component-demo-tab {font-size: 1rem;border: 1px solid #ccc;padding: 10px;}.dynamic-component-demo-posts-sidebar {max-width: 40vw;margin: 0 !important;padding: 0 10px 0 0 !important;list-style-type: none;border-right: 1px solid #ccc;line-height: 1.6em;}.dynamic-component-demo-posts-sidebar li {white-space: nowrap;text-overflow: ellipsis;overflow: hidden;cursor: pointer;}.dynamic-component-demo-active {background: lightblue;}.dynamic-component-demo-post-container {padding-left: 10px;}.dynamic-component-demo-post > :first-child {margin-top: 0 !important;padding-top: 0 !important;} </style> <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script></head><body><div id='app'><button v-for='tab in tabs' v-bind: @click='currentTab = tab'>{{ tab }}</button><keep-alive><component v-bind:is='currentTabComponent'></component></keep-alive></div><script> Vue.component(’tab-posts’, {data: function(){return {posts: [{id: 1, title: ’Cat Ipsum’, content: ’Cont wait for the storm to pass, ...’},{id: 2, title: ’Hipster Ipsum’, content: ’Bushwick blue bottle scenester ...’},{id: 3, title: ’Cupcake Ipsum’, content: ’Icing dessert souffle ...’},],selectedPost: null}}, template: `<div class='dynamic-component-demo-posts-tab dynamic-component-demo-tab'><ul class='dynamic-component-demo-posts-sidebar'><li v-for='post in posts' v-bind:key='post.id' v-on:click='selectedPost = post' v-bind:class='{’dynamic-component-demo-active’: post===selectedPost}'>{{ post.title }}</li></ul><div class='dynamic-component-demo-post-container'><div v-if='selectedPost' class='dynamic-component-demo-post'><h3>{{ selectedPost.title }}</h3><div v-html='selectedPost.content'></div></div><strong v-else>Click on a blog title to the left to view it.</strong></div></div>` });Vue.component(’tab-archive’, {template: ’<div class='dynamic-component-demo-tab'>Archive component</div>’}); new Vue({ el: ’#app’,data: {currentTab: ’Posts’,tabs: [’Posts’, ’Archive’]},computed: {currentTabComponent: function(){return ’tab-’ + this.currentTab.toLowerCase()}} });</script></body></html>

深入了解Vue動(dòng)態(tài)組件和異步組件

在動(dòng)態(tài)組件上使用keep-alive,可以在組件切換時(shí)保持組件的狀態(tài),避免了重復(fù)渲染的性能問(wèn)題。

2.異步組件

Vue 允許你以一個(gè)工廠函數(shù)的方式定義你的組件,這個(gè)工廠函數(shù)會(huì)異步解析你的組件定義。

Vue.component(’async-example’, function (resolve, reject) {})

這里可以回顧一下 Vue.js — 組件基礎(chǔ)。

我們使用通過(guò)webpack打包的Vue項(xiàng)目來(lái)介紹異步組件。

<!-- HelloWorld.vue --><template> <div> <h2 class='title'>{{msg}}</h2> </div></template><script>export default { data () { return { msg: ’Hello Vue!’ } }}</script><!-- Add 'scoped' attribute to limit CSS to this component only --><style scoped> .title { padding: 5px; color: white; background: gray; }</style><!-- App.vue --><template> <div id='app'> <HelloWorld/> </div></template><script>import HelloWorld from ’./components/HelloWorld’export default { name: ’App’, components: { HelloWorld }}</script><style></style>

我們把App.vue的<script>標(biāo)簽里面的內(nèi)容改為:

export default { name: ’App’, components: { HelloWorld: () => import(’./components/HelloWorld’) }}

這樣就實(shí)現(xiàn)了App組件異步加載HelloWorld組件的功能。

我們可以實(shí)現(xiàn)按需加載。

<!-- App.vue --><template> <div id='app'> <button @click='show = true'>Load Tooltip</button> <div v-if='show'> <HelloWorld/> </div> </div></template><script>export default { data: () => ({ show: false }), components: { HelloWorld: () => import(’./components/HelloWorld’) }}</script><style></style>

這里的異步組件工廠函數(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})參考:

動(dòng)態(tài)組件 & 異步組件 — Vue.js

以上就是深入了解Vue動(dòng)態(tài)組件和異步組件的詳細(xì)內(nèi)容,更多關(guān)于Vue動(dòng)態(tài)組件和異步組件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 久久最新视频 | free性欧美嫩交 | 国产在线观看一区二区三区 | 欧美一级在线毛片免费观看 | 精品国产亚洲一区二区三区 | 欧美在线做爰高清视频 | 在线免费成人网 | 免费观看成人毛片 | 色屁屁一区二区三区视频国产 | 在线观看人成午夜影片 | 欧美一级大片免费观看 | 国产毛片a | 欧美高清一区二区三区欧美 | 久草手机视频在线观看 | 久久综合狠狠综合狠狠 | 久久久9视频在线观看 | 午夜性爽视频男人的天堂在线 | 欧美另类自拍 | 日本特黄aaaaaaa大片 | 国产成人综合手机在线播放 | 国内偷拍免费视频 | 美女黄色在线观看 | 国产精品免费视频一区二区三区 | 永久免费观看午夜视频在线 | 久久精品国产亚洲精品2020 | 9久9久女女热精品视频免费观看 | 久久男人天堂 | 在线看黄网址 | 日韩视频国产 | 国产高清av在线播放 | 国产一区二区三区免费看 | 精品久久久久中文字幕日本 | 国产成人a视频在线观看 | 91日韩精品天海翼在线观看 | 九九re6精品视频在线观看 | 欧美日韩性视频一区二区三区 | 在线成人免费看大片 | 国产第一草草影院 | 99爱在线精品视频网站 | 欧美日韩精品国产一区在线 | 国产一区二区三区免费播放 |