视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue组件高级进阶使用
2020-11-27 19:46:20 责编:小采
文档


这次给大家带来vue 组件高级进阶使用,vue 组件高级进阶使用的注意事项有哪些,下面就是实战案例,一起来看一下。

一、递归组件

组件在它的模板内可以递归地调用自己, 只要给组件设置name 的选项就可以了。

示例如下:

 <p id="app19">
 <my-component19 :count="1"></my-component19>
 </p>
Vue.component('my-component19',{
 name: 'my-component19', //其实当你利用 Vue.component 全局注册了一个组件,全局的ID会被自动设置为组件的name。
 props: {
 count: {
 type: Number,
 default: 1
 }
 },
 template: '<p><my-component19 :count="count+1" v-if="count<3"></my-component19></p>'
});
var app19 = new Vue({
 el: '#app19'
});

渲染结果为:

 <p id="app19">
 <p>
 <p>
 <p><!----></p>
 </p>
 </p>
 </p>

设置name 后,在组件模板内就可以递归使用了,不过需要注意的是,必须给一个条件来递归数量,否则会抛出错误: max stack size exceeded 。

组件递归使用可以用来开发一些具有未知层级关系的组件,比如级联选择器和树形控件等。

二、内联模板

组件的模板一般都是在template 选项内定义的, Vue 提供了一个内联模板的功能,在使用组件时,给组件标签使用inline-template 特性,组件就会把它的内容当作模板,而不是把它当内容分发,这让模板更灵活。

示例如下:

<p id="app20">
 <my-component20 inline-template>
 <p>
 <h3>在父组件中定义子组件的模板</h3>
 <p>{{msg}}</p>
 </p>
 </my-component20>
 </p>
Vue.component('my-component20',{
 data: function(){
 return {
 msg: '在子组件声明的数据'
 }
 }
});
var app20 = new Vue({
 el: '#app20'
});

三、动态组件

Vue.js 提供了一个特殊的元素<component> 用来动态地挂载不同的组件, 使用is特性来选择要挂载的组件。

示例如下:

<p id="app21">
 <component :is="currentView"></component>
 <button @click="changeView('A')">切换到A</button>
 <button @click="changeView('B')">切换到B</button>
 <button @click="changeView('C')">切换到C</button>
 </p>
var app21 = new Vue({
 el: '#app21',
 data: {
 currentView: 'comA'
 },
 methods: {
 changeView: function(data){
 this.currentView = 'com'+ data  //动态地改变currentView的值就可以动态挂载组件了。
 }
 },
 components: {
 comA: {
 template: '<p>组件A</p>'
 },
 comB: {
 template: '<p>组件B</p>'
 },
 comC: {
 template: '<p>组件C</p>'
 }
 }
});

四、异步组件

当你的工程足够大, 使用的组件足够多时, 是时候考虑下性能问题了, 因为一开始把所有的组件都加载是没必要的一笔开销。

好在Vue.js 允许将组件定义为一个工厂函数,动态地解析组件。Vue. 只在组件需要渲染时触发工厂函数, 并且把结果缓存起来,用于后面的再次渲染。

 <p id="app22">
 <my-component22></my-component22>
 </p>
Vue.component('my-component22',function(resolve, reject){
 window.setTimeout(function(){
 resolve({
 template: '<p>我是异步渲染的</p>'
 })
 },2000)
});
var app22 = new Vue({
 el: '#app22'
});

工厂函数接收一个resolve 回调,在收到从服务器下载的组件定义时调用。也可以调用reject( reason )指示加载失败。
这里setTimeout 只是为了演示异步,具体的下载逻辑可以自己决定,比如把组件配置写成一个对象配置,通过Ajax 来请求,然后调用resolve 传入配置选项。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

如何开发一个自定义库

如何使用JS实现合并多个数组去重算

下载本文
显示全文
专题