基于类的vue组件的标签名称是啥

Posted

技术标签:

【中文标题】基于类的vue组件的标签名称是啥【英文标题】:What is the tag name of class based vue component基于类的vue组件的标签名称是什么 【发布时间】:2017-09-27 22:17:06 【问题描述】:

参考下面的链接,我们可以使用 TypeScript 编写的基于类的 vue 组件。 使用这些自定义组件的正确方法是什么?

例如,下面的 Es5 代码定义了一个组件,它可以在其他组件的模板中使用,例如 <my-component></my-component>,因为我们将名称 'my-component' 作为 Vue.component 方法的参数。 如何在 typescript 中实现这一点?

Vue.component('my-component', 
  template: '<span> message </span>',
  data: 
    message: 'hello'
  
)

Vue.component('parent-component', 
  template: '<my-component></my-component>'
)

https://vuejs.org/v2/guide/typescript.html#Class-Style-Vue-Components https://alligator.io/vuejs/typescript-class-components/

基于类的 Vue 组件 这个组件的标签名是什么,可以在其他组件的模板字符串中使用?

import Vue from 'vue'
import Component from 'vue-class-component'
// The @Component decorator indicates the class is a Vue component
@Component(
  // All component options are allowed in here
  template: '<button @click="onClick">Click!</button>'
)
export default class MyComponent extends Vue 
  // Initial data can be declared as instance properties
  message: string = 'Hello!'
  // Component methods can be declared as instance methods
  onClick (): void 
    window.alert(this.message)
  

【问题讨论】:

【参考方案1】:

您仍然可以像不使用 Typescript 一样注册组件:

// MyComponent.ts

import Vue from 'vue'
import Component from 'vue-class-component'

@Component(
  template: '<button @click="onClick">Click!</button>'
)
export default class MyComponent extends Vue 
  message: string = 'Hello!'
  onClick (): void 
    window.alert(this.message)
  


// Register the component globally
Vue.component('my-component', MyComponent)

由于上面的代码是从模块中导出组件,你可能不应该全局注册它(除非它是一个通用组件)。最好的方法是将组件导入到将要使用它的其他组件的模块中:

// App.ts

import Vue from 'vue'
import MyComponent from './MyComponent'

new Vue(
  el: '#app',
  components: 
    MyComponent  // will register as <my-component> in #app's template
  
)

【讨论】:

你能告诉我这段代码是如何工作的吗?对我来说没有。它告诉我,该组件未找到,因此未注册。我按照您上面的所有步骤进行操作。 您采取了哪种方法,第一种还是第二种?如果是第一个(全局注册组件),您是否确保在您的主组件实例化之前注册了该组件? 好吧,我两个都拿了,因为第一个是类组件,第二个是主 vue 实例。 好吧,你是对的。我现在只使用第一个,它可以工作:-)

以上是关于基于类的vue组件的标签名称是啥的主要内容,如果未能解决你的问题,请参考以下文章

vue03

Vue 2 + TypeScript:避免直接改变 Prop - 在带有 vue-property-decorator 的基于类的组件中

在打字稿中的基于 Vue 类的组件中键入 prop

在 vue 组件中使用包含类的自己的 JS 文件

Vue 基于类的组件警告:属性未在实例上定义,但在渲染期间引用

Vue 怎么缓存当前的组件?缓存后怎么更新?说说你对keep-alive的理解是啥