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 相关文章推荐
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
Jun 18 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
Node.js实现数据推送
Apr 14 Javascript
jQuery实现的网页换肤效果示例
Sep 20 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
vue实现组件之间传值功能示例
Jul 13 Javascript
AutoJs实现刷宝短视频的思路详解
May 22 Javascript
浅析JavaScript 函数柯里化
Sep 08 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
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
JS跨域问题详解
2014/11/25 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
Vue Promise的axios请求封装详解
2018/08/13 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python异常处理操作实例详解
2018/05/10 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
pandas的qcut()方法详解
2019/07/06 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
使用python实现名片管理系统
2020/06/18 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
护士岗前培训自我评鉴
2014/02/28 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
Javascript webpack动态import
2022/04/19 Javascript