深入了解Vue动态组件和异步组件
网络编程 2021-07-04 14:07www.168986.cn编程入门
这篇文章主要介绍了深入了解Vue动态组件和异步组件的相关资料,帮助大家更好的理解和学习vue组件的相关知识,感兴趣的朋友可以了解下
1.动态组件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> #app { font-size: 0 } .dynamic-ponent-demo-tab-button { padding: 6px 10px; border--left-radius: 3px; border--right-radius: 3px; border: 1px solid #c; cursor: pointer; margin-bottom: -1px; margin-right: -1px; background: #f0f0f0; } .dynamic-ponent-demo-tab-button.dynamic-ponent-demo-active { background: #e0e0e0; } .dynamic-ponent-demo-tab-button:hover { background: #e0e0e0; } .dynamic-ponent-demo-posts-tab { display: flex; } .dynamic-ponent-demo-tab { font-size: 1rem; border: 1px solid #c; padding: 10px; } .dynamic-ponent-demo-posts-sidebar { max-width: 40vw; margin: 0 !important; padding: 0 10px 0 0 !important; list-style-type: none; border-right: 1px solid #c; line-height: 1.6em; } .dynamic-ponent-demo-posts-sidebar li { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; cursor: pointer; } .dynamic-ponent-demo-active { background: lightblue; } .dynamic-ponent-demo-post-container { padding-left: 10px; } .dynamic-ponent-demo-post > :first-child { margin-: 0 !important; padding-: 0 !important; } </style> <script src="https://cdn.jsdelivr./npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <button v-for="tab in tabs" class="dynamic-ponent-demo-tab-button" v-bind:class="{'dynamic-ponent-demo-active': tab === currentTab}" @click="currentTab = tab">{{ tab }}</button> <keep-alive> <ponent v-bind:is="currentTabComponent"></ponent> </keep-alive> </div> <script> Vue.ponent('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-ponent-demo-posts-tab dynamic-ponent-demo-tab"> <ul class="dynamic-ponent-demo-posts-sidebar"> <li v-for="post in posts" v-bind:key="post.id" v-on:click="selectedPost = post" v-bind:class="{'dynamic-ponent-demo-active': post===selectedPost}"> {{ post.title }} </li> </ul> <div class="dynamic-ponent-demo-post-container"> <div v-if="selectedPost" class="dynamic-ponent-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.ponent('tab-archive', { template: '<div class="dynamic-ponent-demo-tab">Archive ponent</div>' }); new Vue({ el: '#app', data: { currentTab: 'Posts', tabs: ['Posts', 'Archive'] }, puted: { currentTabComponent: function(){ return 'tab-' + this.currentTab.toLowerCase() } } }); </script> </body> </html>
在动态组件上使用keep-alive,可以在组件切换时保持组件的状态,避免了重复渲染的性能问题。
2.异步组件
Vue 允许你以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。
Vue.ponent('async-example', function (resolve, reject) {})
这里可以回顾一下 。
我们使用通过webpack打包的Vue项目来介绍异步组件。
<!-- 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 ponent only --> <style scoped> .title { padding: 5px; color: white; background: gray; } </style> <!-- App.vue --> <template> <div id="app"> <HelloWorld/> </div> </template> <script> import HelloWorld from './ponents/HelloWorld' export default { name: 'App', ponents: { HelloWorld } } </script> <style> </style>
我们把App.vue的<script>标签里面的内容改为
export default { name: 'App', ponents: { HelloWorld: () => import('./ponents/HelloWorld') } }
这样就实现了App组件异步加载HelloWorld组件的功能。
我们可以实现按需加载。
<!-- 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 }), ponents: { HelloWorld: () => import('./ponents/HelloWorld') } } </script> <style> </style>
这里的异步组件工厂函数也可以返回一个如下格式的对象
const AsyncComponent = () => ({ // 需要加载的组件 (应该是一个 `Promise` 对象) ponent: import('./MyComponent.vue'), // 异步组件加载时使用的组件 loading: LoadingComponent, // 加载失败时使用的组件 error: ErrorComponent, // 展示加载时组件的延时时间。默认值是 200 (毫秒) delay: 200, // 如果提供了超时时间且组件加载也超时了, // 则使用加载失败时使用的组件。默认值是`Infinity` timeout: 3000 })
参考
以上就是深入了解Vue动态组件和异步组件的详细内容,更多关于Vue动态组件和异步组件的资料请关注狼蚁SEO其它相关文章!
上一篇:vue 组件基础知识总结
下一篇:如何在 Vue 表单中处理图片
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程