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 相关文章推荐
jQuery的一些注意
Dec 06 Javascript
js表数据排序 sort table data
Feb 18 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 Javascript
Jquery实现跨域异步上传文件总结
Feb 03 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
基于js的变量提升和函数提升(详解)
Sep 17 Javascript
如何编写一个d.ts文件的步骤详解
Apr 13 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
JavaScript 声明私有变量的两种方式
Feb 05 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
编译问题
2006/10/09 PHP
PHP去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
超简单的jquery的AJAX用法
2010/05/10 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python简单生成随机数的方法示例
2018/03/31 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
python中的django是做什么的
2020/07/31 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
经典而简洁的婚礼主持词
2014/03/13 职场文书
《春天来了》教学反思
2014/04/07 职场文书
公司晚会策划方案
2014/05/17 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
心得体会的写法
2014/09/05 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers