Vue.js组件应用与嵌套数据递归组件案例
作者:秋了秋 发表时间:2017年08月15日
本篇文章主要讲的是嵌套数据递归展示的应用,因为它属于组件应用,so,标题就这样写了,也顺带讲讲组件的通用应用。vue的组件运用得好,可替代任何模板插件,甚至做得更好。
其它如模板、数据绑定就不说了,上官网看个几分钟就会了。但是对于组件应用以及组件的高级应用(递归),会让很多人理解起来比较费劲,也讲讲比较容易入坑的地方。
众所周知,vue的初始化是这样的(附常用初始属性名):
var vue = new Vue({
el: “#app”,//选择器
data: [],//数据
component:{},//组件
method:{}//方法
});
每初始化一次,就生成一个封闭的应用空间,即在改选择器内只能使用当前初始化的东西,如数据,组件,方法。大多数情况下一个页面初始化一次就可以,也有少部分情况需要分开初始化。所以必须给大家灌输个思想:vue的初始化也有作用域,如同函数的作用域。所以如上方法的初始化组件只能在被调用一次,递归的话将会出现error: [Vue warn]: Unknown custom element: <***> - did you register the component correctly? For recursive components, make sure to provide the "name" option. (found in 即使你已经指定了”name”, 主要是组件定义的方法不对,所以递归的组件请挂载在全局上:
Vue.component("list-bikes",{
template:"#bike-template",
props:["my_lists"]
});
var vue = new Vue({
...
});
全局的组件一定要在初始化之前定义,现在来看看使用模板组件实现复用递归是如何让实现的。假如有初始数据:
在这串代码之前先注册全局组件:
Vue.component("list-bikes",{
template:"#bike-template",
props:["my_lists"]
});
Html作用域中调用组件:
<div id="app">
<list-bikes :my_lists="lists"></list-bikes>
</div>
只有在id为app元素里面才能使用vue的语法,这里只有注册的组件,标签名为注册该组件的名字,同时组件中绑定了数据lists到组件的自定义属性my_lists,注意,组件的自定义属性不能有横杆-,组件中是通过调用my_lists间接调用lists数据的.
Html中写好把lists数据循环出来的通用模板,注意script的type类型:
<script type="vue/template" id="bike-template">
<ul>
<li v-for="item in my_lists" :id="item.id">
{{item.name}}
<template v-if="item.children.length">
<list-bikes :my_lists="item.children"></list-bikes>
</template>
</li>
</ul>
</script>
此模板里面根据条件又调用了自身一次,一定要限制条件,否则无穷无尽的调用,会报溢出错误。最终输出结果:
