2016-03-30 4 views
2

С угловым 2.0.0-beta.8 Я создал пару пользовательских декораторов, которые расширяют декоратор @Component.Расширение углового декоратора компонента

Чтобы сделать это, я использовал этот код:

import {..., View } from 'angular2/core'; 

... 

export var MyCustomComponent:ComponentFactory = 
    <ComponentFactory>makeDecorator(MyCustomComponentMetadata, (fn:any) => fn.View = View); 

Теперь, с угловой 2.0.0-beta.12, «Вид» декоратор уронили так импорта выдаст ошибку, потому что «angular2/core 'не имеет экспортированного члена' View '.

Как я должен создать пользовательский декоратор компонентов?

+1

Это не для меня ясно, что вы просите. '@Component()' + '@View()' стал просто '@Component()' Разве вы не можете просто расширять '@Component()' вместо '@View()'? –

+0

Чтобы сделать декоратор 'MyCustomComponent', мне нужно вызвать функцию' makeDecorator', которая, как второй аргумент, принимает '(fn: any) => fn.View = View'. Для этого для компиляции мне нужно импортировать 'View'. Я не хочу расширять декоратор '@View()', но только декоратор '@Component()'. – Gigitsu

+0

Вместо этого вы можете использовать 'Компонент', представление перестало существовать. –

ответ

4

Вы можете сделать

import {Component} from 'angular2/angular2'; 
import {MyCustomComponentMetadata} from ...; 

export function MyCustomComponent(config: MyCustomComponentMetadata) { 
    return function(cls) { 
    var annotations = Reflect.getMetadata('annotations', cls) || []; 
    annotations.push(new Component(config)); 
    Reflect.defineMetadata('annotations', annotations, cls); 
    return cls; 
    }; 
}; 
+0

Я немного изменил этот код, чтобы соответствовать моим требованиям и, кажется, отлично работает! Один вопрос, почему мне нужно сделать 'const _reflect: any = Reflect;'? Могу ли я просто использовать «Отражение»? – Gigitsu

+1

уверен .... обновлено – Luca

Смежные вопросы