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 getBoundingClientRect() 来获取页面元素的位置
Nov 25 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
js实现window.open不被拦截的解决方法汇总
Oct 30 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery取消特定的click事件
Feb 29 Javascript
通过命令行创建vue项目的方法
Jul 20 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
javascript实现函数柯里化与反柯里化过程解析
Oct 08 Javascript
element-ui tree结构实现增删改自定义功能代码
Aug 31 Javascript
JavaScript实现筛选数组
Mar 02 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
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
Python动态生成多维数组的方法示例
2018/08/09 Python
flask-restful使用总结
2018/12/04 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
如何真正的了解python装饰器
2020/08/14 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
市优秀教师事迹材料
2014/02/05 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
学用政策心得体会
2014/09/10 职场文书
走进毛泽东观后感
2015/06/04 职场文书
龙猫观后感
2015/06/09 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书