动态组件与 v-once 指令

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="./vue.js"></script>
<!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="root">
<child-one v-if="type == ‘child-one‘"></child-one>
<child-two v-if="type == ‘child-two‘"></child-two>

<button @click="handleButtonClick">change</button>
</div>
<script type="text/javascript">
Vue.component("child-one", {
template: `<div>child-one</div>`
});

Vue.component("child-two", {
template: `<div>child-two</div>`
});

var vm = new Vue({
el: "#root",
data: {
type: "child-one"
},
methods: {
handleButtonClick: function() {
this.type = (this.type == "child-one" ? "child-two" : "child-one");
}
}
})
</script>
</body>
</html>

同样的效果,使用动态组件(点击切换会销毁一个组件,创建另一个组件。很显然,这样对性能是有损耗的):

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./vue.js"></script>
    <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="root">
    //当然还可以用动态组件的方式(vue自带的标签,它指的就是一个动态组件)。动态组件的意思是:它会根据:is里面数据的变化自动加载不同的组件:
    <component :is="type"></component>

    <button @click="handleButtonClick">change</button>
</div>
<script type="text/javascript">
    Vue.component("child-one", {
        template: `<div>child-one</div>`
    });

    Vue.component("child-two", {
        template: `<div>child-two</div>`
    });

    var vm = new Vue({
        el: "#root",
        data: {
            type: "child-one"
        },
        methods: {
            handleButtonClick: function() {
                this.type = (this.type == "child-one" ? "child-two" : "child-one");
            }
        }
    })
</script>
</body>
</html> 

为了解决频繁销毁-创建,可以用v-once(因为这个v-once,在切换的时候会把要销毁的这个放内存里了。也就是不需要创建了,直接从内存里拿)

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./vue.js"></script>
    <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="root">
    <!-- <child-one v-if="type == ‘child-one‘"></child-one>
    <child-two v-if="type == ‘child-two‘"></child-two> -->

    //当然还可以用动态组件的方式(vue自带的标签,它指的就是一个动态组件)。动态组件的意思是:它会根据:is里面数据的变化自动加载不同的组件:
    <component :is="type"></component>

    <button @click="handleButtonClick">change</button>
</div>
<script type="text/javascript">
    Vue.component("child-one", {
        template: `<div v-once>child-one</div>`
    });

    Vue.component("child-two", {
        template: `<div v-once>child-two</div>`
    });

    var vm = new Vue({
        el: "#root",
        data: {
            type: "child-one"
        },
        methods: {
            handleButtonClick: function() {
                this.type = (this.type == "child-one" ? "child-two" : "child-one");
            }
        }
    })
</script>
</body>
</html> 

原文地址:https://blog.51cto.com/5660061/2419544

时间: 07-11

动态组件与 v-once 指令的相关文章

angular2 学习笔记 ( Dynamic Component 动态组件)

一样这一篇最要讲概念而已. refer : http://blog.rangle.io/dynamically-creating-components-with-angular-2/ (例子)https://www.ag-grid.com/ag-grid-angular-aot-dynamic-components/ (动态 entryComponents) http://stackoverflow.com/questions/40106480/what-are-projectable-node

Hibernate学习---第五节:普通组件和动态组件

一.普通组件映射配置 1.创建组件类,代码如下: package learn.hibernate.bean; /** * 组件类 */ public class Phones { private String companyPhone; private String homePhone; private String personalPhone; public Phones() { } public Phones(String companyPhone, String homePhone, St

静态和动态组件的选择

1.概念: View组件可以用静态创建,即使XML文件,也可以用代码创建. 动态一般用代码加载:静态一般用XML加载 2.使用方法: [1].使用XML创建View  -- 推荐使用!! Android图形用户界面上的组件可以使用XML文件创建 XML文件中使用属性指定组件的属性,如id等. XML文件放置在res/layout下 [2].使用代码创建View --有时候也使会用到 每一个视图组件都是一个View类型的对象 可以在代码中,使用视图类的构造方法,创建View对象 可以调用View对

01_MUI之Boilerplate中:HTML5示例,动态组件,自定义字体示例,自定义字体示例,图标字体示例

?? 1安装HBuilder5.0.0,安装后的界面截图如下: 2 按照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明,创建上图的Boilerplate.html: 3 代码内容如下: <!-- 作者:[email protected] 时间:2015-08-02 描述:使用MUI,您可以先简单地直接将以下CSS和JS加入到您的HTML文档中: <link href="//cdn.muicss.com/mui-0.

迈向angularjs2系列(2):angular2组件和指令详解

<%= INIT %> 内容 一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> &l

关于vue组件的一个小结

用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维护成本更加的适合,而且最近看到Apache对react的相关许可限制:这里不讨论react和vue的对比哪个好,技术框架没有最好的,只有适合项目才是最好的. 进入主题....... 组件,是vue的核心之一. 我们可以把页面各个子模块看成一个组件,可以独立拆分出来.这样不仅维护变得简单了,而且代码复

Vue.js说说组件

什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 如何注册组件? 需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件.Vue.extend方法格式如下: var MyComponent = Vue.extend({ // 选项...后面再介绍 }) 如果想要其他地方使用这个创

什么是组件

Vue.js说说组件 什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 如何注册组件? 需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件.Vue.extend方法格式如下: var MyComponent = Vue.extend({ // 选项...后面再介绍 }) 如果

用addRoutes实现动态路由

原文转自前端路上,转载请注明出处. 之前在基于Vue实现后台系统权限控制一文中提到路由权限的实现思路,因为不喜欢在每次路由跳转的before钩子里做判断,所以在初始化Vue实例前对路由做了筛选,再用实际路由初始化Vue实例,代价是登录页需要从Vue实例中独立出来,实现上倒没什么问题,不过这种做法需要在登录和首页之间通过url跳转,感觉总是不太"优雅",实际上只要能在登录后动态修改当前实例的路由就行了,之前确实没办法,但vue-router 2.2版本新增了一个router.addRou

vue笔记-路由,组件

git page: 任何仓库 master分支,都可以发布(git page) ------------------------------------- 双向过滤器: Vue.filter(name,{ read: write: }); ------------------------------------- 1.0 2.0 ------------------------------------- 引入 vue.js ------------------------------------