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 相关文章推荐
jsTree 基于JQuery的排序节点 Bug
Jul 26 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
简单实现js上传文件功能
Aug 21 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
angularJS1 url中携带参数的获取方法
Oct 09 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 Javascript
详细教你微信公众号正文页SVG交互开发技巧
Jul 25 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
Apr 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
js返回顶部实例分享
2016/12/21 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
python网络编程学习笔记(一)
2014/06/09 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Python补齐字符串长度的实例
2018/11/15 Python
python字符串循环左移
2019/03/08 Python
Python列表解析操作实例总结
2020/02/26 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Python新手学习装饰器
2020/06/04 Python
旅游管理毕业生自荐信
2013/11/05 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
人事专员的岗位职责
2014/03/01 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
幼儿园辞职信
2015/05/13 职场文书
立春观后感
2015/06/18 职场文书
寒假致家长的一封信
2015/10/10 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
vue ref如何获取子组件属性值
2022/03/31 Vue.js