簡體   English   中英

Vue.js-動態組件導入數據和計算屬性

[英]Vue.js - Dynamic component import in data and computed properties

我有組件“頁面”,應該顯示通過其道具檢索的組件。

當我在組件數據中這樣編碼組件路徑時,我設法獲得了組件負載:

<template>
  <div>
    <div v-if="includeHeader">
      <header>
        <fv-header/>
      </header>
    </div>
    <component :is="this.componentDisplayed" />
    <div v-if="includeFooter">
      <footer>
        <fv-complete-footer/>
      </footer>
    </div>
  </div>
</template>

<script>
  import Header from '@/components/Header/Header';
  import CompleteFooter from '@/components/CompleteFooter/CompleteFooter';

  export default {
    name: 'Page',
    props: {
      componentPath: String,
      includeHeader: Boolean,
      includeFooter: Boolean
    },
    data() {
      componentDisplayed: function () {
        const path = '@/components/my_component';
        return import(path);
      },
    },
    components: {
      'fv-header': Header,
      'fv-complete-footer': CompleteFooter,
    },
  }
</script>

但是使用數據我無法在函數中引用我的道具,因為這是未定義的。

我嘗試使用計算屬性而不是數據,但出現錯誤“ src lazy?0309:5未捕獲(承諾)”錯誤:找不到模塊'@ / components / my_component'。但是該模塊存在!但也許當時不存在?

computed: {
  componentDisplayed: function () {
    const path = `@/components/${this.componentPath}`;
    return import(path);
  },
},

必須解決這個問題,但我是vue.js的初學者:)

與其嘗試在子組件中導入組件,不如將其導入父組件並將整個組件作為道具傳遞。

<template>
  <div :is="component" />
</template>

<script>
export default {
  name: "page",
  props: {
    component: {
      required: true
    }
  }
};
</script>

而在父母

<page :component="component" />

import Page from './components/Page';

// and further down

data () {
  return {
    component: HelloWorld
  }
}

編輯Vue模板

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM