【问题标题】:Vue class-based-components Extends And MixinsVue 基于类的组件扩展和混合
【发布时间】:2019-08-01 18:38:50
【问题描述】:

您好,如何使用 typescript 将此组件转换为基于类的组件?

<script>
import { Line } from 'vue-chartjs'
import { chartLast30Days, chartStylingMethods } from '#/mixins'
import { myChartOptions } from '#/const/charts'

export default {
    extends: Line,
    mixins: [chartLast30Days, chartStylingMethods],
    props: { chartPointsDownloads: Array, chartPointsPlays: Array, chartPointsSales: Array },        
}
</script>

【问题讨论】:

标签: typescript vue.js


【解决方案1】:

我可以给你一些代码示例,用于使用 vue 属性装饰器创建基于类的组件、扩展类和使用 mixins。

Vue 组件,基于类:

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
@Component
export default class MyClass extends Vue {
    created() {
        console.log("Created MyClass");
    }
}
</script>

扩展现有类:

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import MyClass from './MyClass';
@Component
export default class MyExtendingClass extends MyClass {
  created() {
    console.log("Created MyExtendingClass");
  }
}
</script>

创建一个mixin:

import Vue from 'vue'
import Component from 'vue-class-component'
@Component
export default class MyMixin extends Vue {
  myMixinValue = 'Fetch my mixin';
}

向组件注入 mixins:

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import MyClass from './MyClass';
import MyMixin from './MyMixin';
@Component({
  mixins: [MyMixin]
})
export default class MyExtendingClass extends MyClass {
  created() {
    console.log("Created MyExtendingClass");
    console.log(this.myMixinValue);
  }
}
</script>

【讨论】:

  • 我在基于类的打字稿中有 vue 项目。并尝试创建简单的扩展。根据您的代码,如果MyClass 是纯.ts 文件,则它的工作OLNY。在像您的示例这样的情况下,当您将一些public foo: string = 'some value' 添加到MyClass 时,它在MyExtendingClass 中将不可见。知道为什么吗?
  • 也许您的转换器(webpack、vue-cli、typescript)会忽略 vue 文件以转换为 JS?如果您在 vue 文件中编写 typescript,则 script 标签为 import -->
  • 我需要为我的所有组件添加一些属性和方法 首选女巫方法?混合还是继承?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多