当前位置: 首页 > news >正文

Vue - 动态组件 异步组件

动态组件

<div id="app">
    <components :is="com[2]"></components>
    <components :is="com[1]"></components>
    <components :is="com[0]"></components>
</ul>
</div>
<script>
var comA = {
    template: '<p>永远相信美好的事情即将发生</p>'
}
var comB = {
    template: '<p>javascript学个简单的精通</p>'
}
var comC = {
    template: '<p>学个php都没时间 妈的</p>'
}
new Vue({
    el: '#app',
    components: {
        comA,
        comB,
        comC
    },
    data: {
        com: ['com-a', 'com-b', 'com-c']
    }
})
</script>

1321525-20180610161916654-1051868390.png


动态组件 keep-alive

当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。
重新创建动态组件的行为通常是非常有用的,但是在这个案例中,我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来。为了解决这个问题,我们可以用一个 <keep-alive> 元素将其动态组件包裹起来。

<style>
.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;
}
</style>
<div id="app">
    <button 
        v-for="tab in tabs"
        v-bind:key="tab"
        v-bind:class="['tab-button', {active: currentTab === tab}]"
        v-on:click="currentTab = tab"
    >{{tab}}</button>
    <keep-alive>
        <components
            v-bind:is="currentTabComponent"
            class="tab"
        ></components>
    </keep-alive>
</div>
<script>
var Posts = {
    data: function(){
        return{
            posts: [
                { 
                    id: 1, 
                    title: 'Cat Ipsum',
                    content: '<p>抽时间学PHP啊啊啊啊</p>'
                },
                { 
                    id: 2, 
                    title: 'Hipster Ipsum',
                    content: '<p>javascript 简单的精通</p>'
                },
                { 
                    id: 3, 
                    title: 'Cupcake Ipsum',
                    content: '<p>时间啊 我的朋友 让我们好好相处 珍惜时光 好不好</p>'
                }
            ],
            selectedPost: true
        }
    },
    template: `
        <div class="posts-tab">
            <ul class="posts-sidebar">
                <li 
                    v-for="post in posts"
                    v-bind:class="{selected: post === selectedPost}"
                    @click="selectedPost = post"
                >{{post.title}}</li>
            </ul>
            <div class="selected-post-container">
                <div v-if="selectedPost">
                    <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>
    `
}
var Archive = {
    template: '<p>javascript学个简单的精通</p>'
}
new Vue({
    el: '#app',
    components: {
        Posts,
        Archive
    },
    data: {
        tabs: ['Posts', 'Archive'],
        // 默认是显示第一个组件
        currentTab: 'Posts'
    },
    computed: {
        currentTabComponent: function(){
            // 转换为小写
            return this.currentTab.toLowerCase()
        }
    }
})
</script>
  • 演示demo

1321525-20180610174119603-976909199.gif



异步组件

XXXXXX

转载于:https://www.cnblogs.com/xiaobaiv/p/9162656.html

相关文章:

  • 【查找网站后台的方法】
  • 构建之法第四章两人合作
  • C++虚函数表解析***
  • 缓存一致
  • 七牛云上传图片
  • s22day6笔记
  • BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
  • 【大数据Spark_SparkSQL系列_1】Spark SQL基础(五星重要)
  • bool值的底层应用场景
  • hihocoder:#1082 : 然而沼跃鱼早就看穿了一切(用string)
  • js中提示框闪退问题
  • Web站点抓取工具webhttrack
  • 在rabbitmq操作页面上添加队列、交换器及绑定示图
  • Windows10远程报错:由于CredSSP加密Oracle修正
  • dedecms四张表对应关系
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • Date型的使用
  • exports和module.exports
  • Flannel解读
  • Invalidate和postInvalidate的区别
  • JAVA 学习IO流
  • JS函数式编程 数组部分风格 ES6版
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MobX
  • tensorflow学习笔记3——MNIST应用篇
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue.js-Day01
  • 飞驰在Mesos的涡轮引擎上
  • 如何设计一个微型分布式架构?
  • 赢得Docker挑战最佳实践
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 最简单的无缝轮播
  • 带你开发类似Pokemon Go的AR游戏
  • 说说我为什么看好Spring Cloud Alibaba
  • ​一些不规范的GTID使用场景
  • #includecmath
  • #Linux(帮助手册)
  • #pragma multi_compile #pragma shader_feature
  • (02)vite环境变量配置
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (八)Spring源码解析:Spring MVC
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十八)SpringBoot之发送QQ邮件
  • (循环依赖问题)学习spring的第九天
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (译)计算距离、方位和更多经纬度之间的点
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .CSS-hover 的解释
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET delegate 委托 、 Event 事件
  • .NET 常见的偏门问题
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)