简体   繁体   English

动态组件在 vue typescript 中不起作用

[英]Dynamic Components don't work in typescript in vue

the Hello don't render in my HelloWorld page Hello 不在我的 HelloWorld 页面中呈现

HelloWorld.vue HelloWorld.vue

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

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import Hello from './Hello.vue'

@Component({
  components: {
  Hello
  }
  })
export default class HelloWorld extends Vue {
  @Prop() private msg!: string;
}
</script>

Vue warn in chrome Console Vue 在 chrome 控制台中发出警告

In short:简而言之:

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

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import Hello from './Hello.vue'

@Component({
  components: {Hello}
})
export default class HelloWorld extends Vue {
  @Prop() private msg!: string;
  
  private get component(): VueClass<Hello> {
    return Hello;
  }
}
</script>

In addition to registering the Hello component, you need to return its instance from a computed property;除了注册Hello组件,你还需要从一个计算属性返回它的实例; you could probably assign it to a data property like private component: VueClass<Hello> = Hello , but the point is to make it dynamic, right, so I used the computed one here你可以将它分配给一个数据属性,比如private component: VueClass<Hello> = Hello ,但重点是让它动态,对,所以我在这里使用了计算的

:is requires a variable. :is 需要一个变量。 you have passed a string.你已经传递了一个字符串。 Make that syntax change and it should work更改该语法,它应该可以工作

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

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import Hello from './Hello.vue'

@Component({
  components: {
  Hello
  }
  })
export default class HelloWorld extends Vue {
  @Prop() private msg!: string;
}
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM