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 相关文章推荐
JavaScript 笔记二 Array和Date对象方法
May 22 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
移动适配的几种方案(三种方案)
Nov 25 Javascript
Vue过滤器的用法和自定义过滤器使用
Feb 08 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 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
更改localhost为其他名字的方法
2014/02/10 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
理解javascript闭包
2015/12/15 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
python 实现让字典的value 成为列表
2019/12/16 Python
浅析python 字典嵌套
2020/09/29 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
经典促销广告词大全
2014/03/19 职场文书
借款民事起诉状范文
2015/05/19 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle