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 在线压缩和格式化收藏
Jan 16 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
JS 实现图片直接下载示例代码
Jul 22 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
Angular 2父子组件之间共享服务通信的实现
Jul 04 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
JavaScript this指向相关原理及实例解析
Jul 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
根德YB400的电路分析
2021/03/02 无线电
PHP操作xml代码
2010/06/17 PHP
解析link_mysql的php版
2013/06/30 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
让textarea自动调整大小的js代码
2011/04/12 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
DOM 事件流详解
2015/01/20 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
浅谈Python数据类型之间的转换
2016/06/08 Python
Python计算字符宽度的方法
2016/06/14 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
Python有序字典简单实现方法示例
2017/09/28 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
个人委托书
2014/07/31 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
拖欠货款起诉状
2015/05/20 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python