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 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
向左滚动文字 js代码效果
Aug 17 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
Jun 09 Javascript
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
学习使用bootstrap基本控件(table、form、button)
Apr 12 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
JS常见内存泄漏及解决方案解析
May 30 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下网站防IP攻击代码,超级实用
2010/10/24 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python 中文字符串的处理实现代码
2009/10/25 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python实现bucket排序算法实例分析
2015/05/04 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
大学生蛋糕店创业计划书
2014/01/13 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
班主任寄语2015
2015/02/26 职场文书
新员工入职感言范文!
2019/07/04 职场文书