如何在组件中使用角度6类装饰器?

时间:2018-08-23 16:57:29

标签: typescript angular6

我用角度6创建了一个组件,其中包含有关如何实现装饰器的示例。 因此,我创建了一个名为@Course的自定义装饰器,并在其中设置了一个名为Angular 6的值。现在,如何在组件的构造函数中获取该值?

我想将“ Angular 6”值记录到我的构造函数中。那怎么可能?

这是我的代码。工作良好。我有价值。但是在命令行中出现了错误

ERROR in src/app/components/decorators/decorators.component.ts(19,22): error TS2339: Property 'course' does not exist on type 'DecoratorsComponent'.

import { Component, OnInit } from '@angular/core';

function Course(target) {
  Object.defineProperty(target.prototype, 'course', {
    value: () => "Angular 6"
  })
}

@Course
@Component({
  selector: 'app-decorators',
  templateUrl: './decorators.component.html',
  styleUrls: ['./decorators.component.scss']
})
export class DecoratorsComponent implements OnInit {

  constructor() {
    console.log(this.course());
  }

  ngOnInit() {
  }
}

2 个答案:

答案 0 :(得分:0)

target.prototype.course =()=>'Angular 6';

答案 1 :(得分:0)

您只需要告诉TypeScript编译器有关动态添加的属性。 The simplest way

@Course
// ...
export class DecoratorsComponent implements OnInit {
    // ... 
    [key: string]: any;
}

或者,您将动态属性读取为“数组项”:

constructor() {

    const courseProp = this['course'];

    if (courseProp) {
        console.log(courseProp());
    }
}

注意:因为可能会删除装饰器,所以检查属性是否存在是一个好习惯。