Vue.js組件間的循環(huán)引用方法示例
什么是組件:
眾所周知組件是Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展HTML元素,封裝可重用的代碼。在較高層面上,組件是自定義的元素,Vue.js的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生HTML元素的形式,以is特性擴(kuò)展。下面話不多說了,來一起看看本文的正文內(nèi)容。
引言
寫了大大小小不少基于vue的項(xiàng)目,但是基本沒用到過組件循環(huán)引用的知識。
為了查缺補(bǔ)漏,照著官方文檔擼一個DEMO:組件之間的循環(huán)引用
本人的運(yùn)行版本為 vue-cli@2.8.1,啟用項(xiàng)目后,將以下 js 文件和 vue 文件放置在相應(yīng)的目錄中運(yùn)行。
main.js
import Vue from 'vue' import App from './App' new Vue({ el: '#app', template: '<App/>', components: { App } })
main.js 導(dǎo)入 App 組件,并在 components 中注冊 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 組件導(dǎo)入 TreeFolder 組件,并在 components 中注冊 TreeFolder 組件。
components/tree-folder.vue
<template> <p> <span>{{ folder.name }}</span> <tree-folder-contents :children="folder.children"></tree-folder-contents> </p> </template> <script> // 官方文檔:「在我們的例子中,將 tree-folder 組件做為切入起點(diǎn)。我們知道制造矛盾的是 tree-folder-contents 子組件,所以我們在 tree-folder 組件的生命周期鉤子函數(shù) 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. // 所以我們應(yīng)該改為基于es6的寫法異步加載一個組件如下 this.$options.components.TreeFolderContents = () => import('./tree-folder-contents.vue') } } </script>
TreeFolder 組件導(dǎo)入 TreeFolderContents 組件,并在 components 中注冊 TreeFolderContents 組件。
components/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 組件又導(dǎo)入 TreeFolder 組件,并在 components 中注冊 TreeFolder 組件,產(chǎn)生了循環(huán)引用。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Vue實(shí)現(xiàn)搜索 和新聞列表功能簡單范例
本文通過實(shí)例代碼給大家介紹了Vue實(shí)現(xiàn)搜索 和新聞列表功能簡單范例,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧2018-03-03vue-router實(shí)現(xiàn)簡單vue多頁切換、嵌套路由、路由跳轉(zhuǎn)的步驟和報錯
最近學(xué)習(xí)到VUE路由這塊,發(fā)現(xiàn)這塊知識點(diǎn)有點(diǎn)多,好容易混亂,這篇文章主要介紹了vue-router實(shí)現(xiàn)簡單vue多頁切換、嵌套路由、路由跳轉(zhuǎn)的步驟和報錯的相關(guān)資料,需要的朋友可以參考下2024-05-05基于vue2.0實(shí)現(xiàn)仿百度前端分頁效果附實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了基于vue2.0實(shí)現(xiàn)仿百度前端分頁效果,在文中給大家記錄了遇到的問題及解決方法,需要的朋友可以參考下2018-10-10Vue實(shí)現(xiàn)高德坐標(biāo)轉(zhuǎn)GPS坐標(biāo)功能的示例詳解
生活中常用的幾種坐標(biāo)有:WGS-84、GCJ-02與BD-09。本文將利用Vue實(shí)現(xiàn)高德坐標(biāo)轉(zhuǎn)GPS坐標(biāo)功能,即實(shí)現(xiàn)GCJ-02坐標(biāo)轉(zhuǎn)換成WGS-84坐標(biāo),需要的可以參考一下2022-04-04