vue 组件高级用法实例详解


Posted in Javascript onApril 11, 2018

一、递归组件

组件在它的模板内可以递归地调用自己, 只要给组件设置name 的选项就可以了。

示例如下:

<div id="app19">
   <my-component19 :count="1"></my-component19>
  </div>
Vue.component('my-component19',{
 name: 'my-component19', //其实当你利用 Vue.component 全局注册了一个组件,全局的ID会被自动设置为组件的name。
 props: {
  count: {
   type: Number,
   default: 1
  }
 },
 template: '<div><my-component19 :count="count+1" v-if="count<3"></my-component19></div>'
});
var app19 = new Vue({
 el: '#app19'
});

渲染结果为:

<div id="app19">
  <div>
   <div>
    <div><!----></div>
   </div>
  </div>
 </div>

 设置name 后,在组件模板内就可以递归使用了,不过需要注意的是,必须给一个条件来限制递归数量,否则会抛出错误: max stack size exceeded 。

组件递归使用可以用来开发一些具有未知层级关系的独立组件,比如级联选择器和树形控件等。

二、内联模板

组件的模板一般都是在template 选项内定义的, Vue 提供了一个内联模板的功能,在使用组件时,给组件标签使用inline-template 特性,组件就会把它的内容当作模板,而不是把它当内容分发,这让模板更灵活。

示例如下:     

<div id="app20">
   <my-component20 inline-template>
    <div>
     <h3>在父组件中定义子组件的模板</h3>
     <p>{{msg}}</p>
    </div>
   </my-component20>
  </div>
Vue.component('my-component20',{
 data: function(){
  return {
   msg: '在子组件声明的数据'
  }
 }
});
var app20 = new Vue({
 el: '#app20'
});

三、动态组件

Vue.js 提供了一个特殊的元素<component> 用来动态地挂载不同的组件, 使用is特性来选择要挂载的组件。

示例如下:     

<div id="app21">
   <component :is="currentView"></component>
   <button @click="changeView('A')">切换到A</button>
   <button @click="changeView('B')">切换到B</button>
   <button @click="changeView('C')">切换到C</button>
  </div>
var app21 = new Vue({
 el: '#app21',
 data: {
  currentView: 'comA'
 },
 methods: {
  changeView: function(data){
   this.currentView = 'com'+ data//动态地改变currentView的值就可以动态挂载组件了。
  }
 },
 components: {
  comA: {
   template: '<div>组件A</div>'
  },
  comB: {
   template: '<div>组件B</div>'
  },
  comC: {
   template: '<div>组件C</div>'
  }
 }
});

 四、异步组件

当你的工程足够大, 使用的组件足够多时, 是时候考虑下性能问题了, 因为一开始把所有的组件都加载是没必要的一笔开销。

好在Vue.js 允许将组件定义为一个工厂函数,动态地解析组件。Vue. 只在组件需要渲染时触发工厂函数, 并且把结果缓存起来,用于后面的再次渲染。   

<div id="app22">
      <my-component22></my-component22>
    </div>
Vue.component('my-component22',function(resolve, reject){
  window.setTimeout(function(){
    resolve({
      template: '<div>我是异步渲染的</div>'
    })
  },2000)
});

var app22 = new Vue({
  el: '#app22'
});

工厂函数接收一个resolve 回调,在收到从服务器下载的组件定义时调用。也可以调用reject( reason )指示加载失败。
这里setTimeout 只是为了演示异步,具体的下载逻辑可以自己决定,比如把组件配置写成一个对象配置,通过Ajax 来请求,然后调用resolve 传入配置选项。

总结

以上所述是小编给大家介绍的vue 组件高级用法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript利用控件对windows的操作实现原理与应用
Dec 23 Javascript
JS弹出可拖拽可关闭的div层完整实例
Feb 13 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 Javascript
jQuery处理图片加载失败的常用方法
Jun 08 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
JS回调函数简单易懂的入门实例分析
Sep 29 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 Javascript
vue单个组件实现无限层级多选菜单功能
Apr 10 #Javascript
React如何避免重渲染
Apr 10 #Javascript
vue select组件的使用与禁用实现代码
Apr 10 #Javascript
vue 自定义 select内置组件
Apr 10 #Javascript
JavaScript如何对图片进行黑白化
Apr 10 #Javascript
axios 处理 302 状态码的解决方法
Apr 10 #Javascript
vue.js中npm安装教程图解
Apr 10 #Javascript
You might like
JAVA/JSP学习系列之二
2006/10/09 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
js字母大小写转换实现方法总结
2013/11/13 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python实现可变变量名方法详解
2019/07/01 Python
logging level级别介绍
2020/02/21 Python
Python 列表反转显示的四种方法
2020/11/16 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
中国合伙人观后感
2015/06/02 职场文书
运动员代表致辞
2015/07/29 职场文书
大学生军训感言
2015/08/01 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle