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 相关文章推荐
动态添加js事件实现代码
Mar 12 Javascript
基于jQuery的图片大小自动适应实现代码
Nov 17 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 Javascript
浅谈vue 组件中的setInterval方法和window的不同
Jul 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php checkbox 取值详细说明
2010/08/19 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
七年级地理教学反思
2014/01/26 职场文书
施工材料员岗位职责
2014/02/12 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
深度学习详解之初试机器学习
2021/04/14 Python