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 相关文章推荐
wordpress之js库集合研究介绍
Aug 17 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 Javascript
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
Apr 11 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
express异步函数异常捕获示例详解
Nov 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水印技术
2007/02/14 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
Python 递归函数详解及实例
2016/12/27 Python
python实现点对点聊天程序
2018/07/28 Python
python实现三维拟合的方法
2018/12/29 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
python实现简单飞行棋
2020/02/06 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
实用求职信范文分享
2013/12/25 职场文书
学校门卫管理制度
2014/01/30 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
新教师教学工作总结
2015/08/14 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python