Component는 Vue.js의 가장 강력한 기능 중 하나입니다. 구성 요소는 HTML 요소를 확장하고 재사용 가능한 코드를 캡슐화할 수 있습니다. 다음 글에서는 Vue.js 컴포넌트 간 순환 참조에 대한 관련 정보를 주로 소개하고 있으며, 필요한 친구들이 참고할 수 있도록 샘플 코드를 통해 자세히 소개하고 있습니다.
컴포넌트란 무엇입니까:
우리 모두는 컴포넌트가 Vue.js의 가장 강력한 기능 중 하나라는 것을 알고 있습니다. 구성 요소는 HTML 요소를 확장하고 재사용 가능한 코드를 캡슐화할 수 있습니다. 높은 수준에서 구성 요소는 Vue.js 컴파일러가 특별한 기능을 추가하는 사용자 정의 요소입니다. 어떤 경우에는 구성 요소가 is 속성으로 확장된 기본 HTML 요소의 형태일 수도 있습니다. 아래에서는 할 말이 많지 않으니, 이 글의 본문을 살펴보겠습니다.
소개
저는 크고 작은 Vue 기반 프로젝트를 많이 작성했지만 기본적으로 컴포넌트 순환 참조에 대한 지식을 사용한 적이 없습니다.
결함을 확인하기 위해 공식 문서: 구성 요소 간 순환 참조
제 실행 버전은 vue-cli@2.8.1에 따라 DEMO를 만들었습니다. 프로젝트를 활성화한 후 다음 js 파일과 vue 파일을 배치합니다. 해당 디렉터리에서 실행합니다.
main.js
import Vue from 'vue' import App from './App' new Vue({ el: '#app', template: '<App/>', components: { App } })
main.js는 App 구성 요소를 가져오고 App 구성 요소를 구성 요소에 등록합니다.
App.vue
<template> <p id="app"> <li v-for="folder in folders"> <tree-folder v-bind:folder="folder"></tree-folder> </li> </p> </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 컴포넌트를 가져와서 TreeFolder 컴포넌트를 컴포넌트에 등록합니다.
comComponents/tree-folder.vue
<template> <p> <span>{{ folder.name }}</span> <tree-folder-contents :children="folder.children"></tree-folder-contents> </p> </template> <script> // 官方文档:「在我们的例子中,将 tree-folder 组件做为切入起点。我们知道制造矛盾的是 tree-folder-contents 子组件,所以我们在 tree-folder 组件的生命周期钩子函数 beforeCreate 中去注册 tree-folder-contents 组件」 export default { props: ['folder'], data: function () { return {} }, beforeCreate: function () { // 官方文档给出的是require // this.$options.components.TreeFolderContents = require('./tree-folder-contents.vue') // 在基于vue-cli@2.8.1按照上面的写法还是会报错 // Failed to mount component: template or render function not defined. // 所以我们应该改为基于es6的写法异步加载一个组件如下 this.$options.components.TreeFolderContents = () => import('./tree-folder-contents.vue') } } </script>
TreeFolder 구성 요소는 TreeFolderContents 구성 요소를 가져오고 TreeFolderContents 구성 요소를 구성 요소에 등록합니다.
comComponents/tree-folder-contents.vue
<template> <ul> <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 { props: ['children'], components: { TreeFolder } } </script>
TreeFolderContents 구성 요소는 TreeFolder 구성 요소를 가져오고 TreeFolder 구성 요소를 구성 요소에 등록하여 순환 참조를 생성합니다.
위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.
관련 기사:
Node.js에서 작은 프로그램 백그라운드 서비스를 구축하는 방법
nodejs+mongodb+vue를 사용하여 ueditor를 구성하는 방법
위 내용은 Vue.js의 구성 요소 간 순환 참조를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!