微信小程序功用更新_Vue.js组件间的循环引用方法示例

Vue.js组件间的循环引用方法示例       组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码。下面这篇文章主要给大家介绍了关于Vue.js组件间循环引用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

什么是组件:

众所周知组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。下面话不多说了,来一起看看本文的正文内容。

引言

写了大大小小不少基于vue的项目,但是基本没用到过组件循环引用的知识。

为了查缺补漏,照着官方文档撸一个DEMO:

本人的运行版本为 vue-.1,启用项目后,将以下 js 文件和 vue 文件放置在相应的目录中运行。

main.js

import Vue from 'vue'
import App from './App'
new Vue({
 el: '#app',
 template: ' App/ ',
 components: { App }
})

main.js 导入 App ponents 中注册 App 组件。

App.vue

 template 
 div id="app" 
 li v-for="folder in folders" 
 tree-folder v-bind:folder="folder" /tree-folder 
 /li 
 /div 
 /template 
 script 
 import TreeFolder from './components/tree-folder'
 export default {
 data: function () {
 return {
 folders: [
 name: 'folder1',
 children: [{
 name: 'folder1 - folder1',
 children: [{
 name: 'folder1 - folder1 - folder1'
 }, {
 name: 'folder1 - folder2',
 children: [{
 name: 'folder1 - folder2 - folder1'
 }, {
 name: 'folder1 - folder2 - folder2'
 name: 'folder 2',
 children: [{
 name: 'folder2 - folder1',
 children: [{
 name: 'folder2 - folder1 - folder1'
 }, {
 name: 'folder2 - folder2',
 children: [{
 name: 'folder2-content1'
 name: 'folder 3',
 children: [{
 name: 'folder3 - folder1',
 children: [{
 name: 'folder3 - folder1 - folder1'
 }, {
 name: 'folder3 - folder2',
 children: [{
 name: 'folder3-content1'
 components: {
 TreeFolder
 /script 

App 组件导入 TreeFolder ponents 中注册 TreeFolder 组件。

components/tree-folder.vue

 template 
 span {{ folder.name }} /span 
 tree-folder-contents :children="folder.children" /tree-folder-contents 
 /template 
 script 
 // 官方文档:「在我们的例子中,将 tree-folder 组件做为切入起点。我们知道制造矛盾的是 tree-folder-contents 子组件,所以我们在 tree-folder 组件的生命周期钩子函数 beforeCreate 中去注册 tree-folder-contents 组件」
 export default {
 pro凡科抠图: ['folder'],
 data: function () {
 return {}
 beforeCreate: function () {
 // 官方文档给出的是require
 // this.$ponents.TreeFolderContents = require('./tree-folder-contents.vue')
 // 在基于vue-.1按照上面的写法还是会报错
 // Failed ponent: template or render function not defined.
 // 所以我们应该改为基于es6的写法异步加载一个组件如下
 this.$ponents.TreeFolderContents = () = import('./tree-folder-contents.vue')
 /script 

TreeFolder 组件导入 TreeFolderContents ponents 中注册 TreeFolderContents 组件。

components/tree-folder-contents.vue

 template 
 li v-for="child in children" 
 tree-folder v-if="child.children" :folder="child" /tree-folder 
 span v-else {{ child.name }} /span 
 /li 
 /ul 
 /template 
 script 
 import TreeFolder from './tree-folder'
 export default {
 pro凡科抠图: ['children'],
 components: {
 TreeFolder
 /script 

TreeFolderContents 组件又导入 TreeFolder ponents 中注册 TreeFolder 组件,产生了循环引用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对凡科的支持。


相关阅读