Maison  >  Questions et réponses  >  le corps du texte

javascript - vue utilise des composants asynchrones combinés pour charger des composants à la demande.

<el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
      <el-tab-pane v-for="item in menu" :label="item.name" :name="item.name" :key="item" :component="item.component"><component :is="item.component"></component></el-tab-pane>
    </el-tabs>
methods: {
    handleClick (tab, event) {
        // 异步加载组件
        let getCompoentIndex = this.menu.findIndex(x => x.name === tab.name)
        let component = this.menu[getCompoentIndex].component
        if (!this.menu[getCompoentIndex].loading) {
          this.menu[getCompoentIndex].loading = true
          Vue.component(component, function (resolve, reject) {
            setTimeout(function () {
              require([`./${component}.vue`], resolve)//比如 abc.vue
            }, 1000)
          })
        }
      }
  }

Lorsque vous cliquez dessus, le composant asynchrone est chargé (le composant peut être chargé), mais l'erreur suivante est signalée

[Vue warn]: Unknown custom element: <abc> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

J'ai essayé d'ajouter un nom au composant abc et j'ai toujours cette erreur. Quelqu'un sait-il comment la résoudre ?
abc.vue

export default {
    name: 'abc',
}
仅有的幸福仅有的幸福2674 Il y a quelques jours1216

répondre à tous(2)je répondrai

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-26 10:57:50

    La méthode que j'ai trouvée est d'ajouter si jugement

    <el-tab-pane v-for="item in menu" :label="item.name" :name="item.name" :key="item" :component="item.component"><component :is="item.component" v-if='flag'></component></el-tab-pane>
    data:()=>({
        flag: false
    })

    Ensuite, définissez le drapeau sur true lorsque vous cliquez pour résoudre le problème d'erreur

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-26 10:57:50

    Je l'ai résolu en utilisant WEBPACK.
    Vous pouvez consulter mes projets.

    répondre
    0
  • Annulerrépondre