のような繰り返し関数を挿入するために Mixins を使用することがありますslugUrl()
。
ただし、angular 4 コンパイラでは機能しません。
export function Mixin(decorators: Function[]) {
return function (classFn: Function) {
decorators.forEach(decorator => {
Object.getOwnPropertyNames(decorator.prototype).forEach(name => {
classFn.prototype[name] = decorator.prototype[name];
});
});
};
}
@Mixin([BehaviorInjected])
export class FooComponent {
}
このコードをコンパイルすると、コンパイラは次をスローします。
プロパティ「ngClassControl」はタイプ「FooComponent」に存在しません。
何か案は?
編集: 誰かが尋ねたので、今回はテンプレート レベルで問題を再現する TS ミックスインを使用した別の例を次に示します。
コンポーネント:
@Component({
selector: 'home-page',
template: '<test [tag]="tag"></test>'
})
export class HomePageComponent extends TaggedComponent(MyComponent) {
public tag = 'hi there';
}
@Component({
selector: 'test',
template: '<div></div>'
})
export class TestComponent extends TaggedComponent(MyComponent) {}
ミックスイン:
type Constructor<T> = new(...args: any[]) => T;
export function TaggedComponent<T extends Constructor<{}>>(Base: T) {
class TaggedBase extends Base {
@Input() tag: string;
};
return TaggedBase;
}
export class MyComponent {
protected subscriptions: Subscription = new Subscription();
// ...
}
エラー:
エラーのエラー: テンプレート解析エラー: 'test' の既知のプロパティではないため、'tag' にバインドできません。("][タグ]="タグ">")