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 Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
JavaScript中创建类/对象的几种方法总结
Nov 29 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
JS 仿腾讯发表微博的效果代码
Dec 25 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
vue实现在线翻译功能
Sep 27 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
JS实现多选框的操作
Jun 24 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
基于Vue+Webpack拆分路由文件实现管理
Nov 16 Javascript
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
使用eAccelerator加密PHP程序
2008/10/03 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
Python是编译运行的验证方法
2015/01/30 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python制作词云的方法
2018/01/03 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python实现log日志的示例代码
2018/04/28 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
python实现的Iou与Giou代码
2020/01/18 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
活动总结格式范文
2014/04/26 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
英语教师个人工作总结
2015/02/09 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
python中if和elif的区别介绍
2021/11/07 Python
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL