vue 动态组件用法示例小结


Posted in Javascript onMarch 06, 2020

本文实例讲述了vue 动态组件用法。分享给大家供大家参考,具体如下:

通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,我们让多个组件可以使用同一个挂载点,并动态切换。根据 v-bind:is="组件名" 中的组件名去自动匹配组件,如果匹配不到则不显示。

改变挂载的组件,只需要修改is指令的值即可。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 动态组件</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
 <button @click='toShow'>点击显示子组件</button>
 <component v-bind:is="which_to_show"></component>
</div>

<script>

// 创建根实例
new Vue({
 el: '#app',
 data:{
  which_to_show:'first'
 },
 methods:{
 toShow:function(){
  var arr = ["first","second","third"];
  var index = arr.indexOf(this.which_to_show);
  if(index<2){
  this.which_to_show = arr[index+1];
  }else{
  this.which_to_show = arr[0];
  }
 }
 },
 components:{
 first:{
  template:'<div>这是子组件1<div>'
 },
 second:{
  template:'<div>这是子组件2<div>'
 },
 third:{
  template:'<div>这是子组件3<div>'
 },
 }
})
</script>
</body>
</html>

vue 动态组件用法示例小结

#keep-alive

动态切换掉的组件(非当前显示的组件)是被移除掉了,如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个 keep-alive 指令参数:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 动态组件</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
 <button @click='toShow'>点击显示子组件</button>
 <!----或者<component v-bind:is="which_to_show" keep-alive></component>也行----->
 <keep-alive>
 <component v-bind:is="which_to_show" ></component>
 </keep-alive>
</div>

<script>

// 创建根实例
new Vue({
 el: '#app',
 data:{
  which_to_show:'first'
 },
 methods:{
 toShow:function(){
  var arr = ["first","second","third"];
  var index = arr.indexOf(this.which_to_show);
  if(index<2){
  this.which_to_show = arr[index+1];
  }else{
  this.which_to_show = arr[0];
  } console.log(this.$children); 
 }
 },
 components:{
 first:{
  template:'<div>这是子组件1<div>'
 },
 second:{
  template:'<div>这是子组件2<div>'
 },
 third:{
  template:'<div>这是子组件3<div>'
 },
 }
})
</script>
</body>
</html>

说明:

初始情况下,vm.$children属性中只有一个元素(first组件),

点击按钮切换后,vm.$children属性中有两个元素,

再次切换后,则有三个元素(三个子组件都保留在内存中)。

之后无论如何切换,将一直保持有三个元素。

actived钩子

可以延迟执行当前的组件。

具体用法来说,activate是和template、data等属性平级的一个属性,形式是一个函数,函数里默认有一个参数,而这个参数是一个函数,执行这个函数时,才会切换组件。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 动态组件</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
 <button @click='toShow'>点击显示子组件</button>
 <!----或者<component v-bind:is="which_to_show" keep-alive></component>也行----->
 <keep-alive>
 <component v-bind:is="which_to_show" ></component>
 </keep-alive>
</div>

<script>

// 创建根实例
var vm = new Vue({
    el: '#app',
    data: {
      which_to_show: "first"
    },
    methods: {
      toShow: function () {  //切换组件显示
        var arr = ["first", "second", "third", ""];
        var index = arr.indexOf(this.which_to_show);
        if (index < 2) {
          this.which_to_show = arr[index + 1];
        } else {
          this.which_to_show = arr[0];
        }
        console.log(this.$children);
      }
    },
    components: {
      first: { //第一个子组件
        template: "<div>这里是子组件1</div>"
      },
      second: { //第二个子组件
        template: "<div>这里是子组件2,这里是延迟后的内容:{{hello}}</div>",
        data: function () {
          return {
            hello: ""
          }
        },
        activated: function (done) { //执行这个参数时,才会切换组件
   console.log('hhh')
          var self = this;
   var startTime = new Date().getTime(); // get the current time
   //两秒后执行
          while (new Date().getTime() < startTime + 2000){
   self.hello='我是延迟后的内容';
   }

        }
      },
      third: { //第三个子组件
        template: "<div>这里是子组件3</div>"
      }
    }
  });
</script>
</body>
</html>

vue 动态组件用法示例小结

当切换到第二个组件的时候,会先执行activated钩子,会在两秒后显示组件2.起到了延迟加载的作用。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
Oct 19 Javascript
jQuery的animate函数实现图文切换动画效果
May 03 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
jQuery布局组件EasyUI Layout使用方法详解
Feb 28 Javascript
Vue动画事件详解及过渡动画实例
Feb 09 Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 Javascript
koa-router路由参数和前端路由的结合详解
May 19 Javascript
在小程序中推送模板消息的实现方法
Jul 22 Javascript
基于Express框架使用POST传递Form数据
Aug 10 Javascript
angular共享依赖的解决方案分享
Oct 15 Javascript
extjs图形绘制之饼图实现方法分析
Mar 06 #Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 #Javascript
Node.js中文件系统fs模块的使用及常用接口
Mar 06 #Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 #Javascript
JS实现网页端猜数字小游戏
Mar 06 #Javascript
extjs4图表绘制之折线图实现方法分析
Mar 06 #Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 #Javascript
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
React组件refs的使用详解
2018/02/09 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
Python 初始化多维数组代码
2008/09/06 Python
Python 文件管理实例详解
2015/11/10 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
python requests 测试代理ip是否生效
2018/07/25 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
Android interview questions
2016/12/25 面试题
物控部经理职务说明书
2014/02/25 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
先进党员事迹材料
2014/12/24 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android