2016-07-12 4 views
3

Так что я получил директиву форматирования значения аксессора:Пользовательское Значение Accessor в Angular2

const CUSTOM_VALUE_ACCESSOR = new Provider(
    NG_VALUE_ACCESSOR, { useExisting: forwardRef(() => NumbersValueAccessor), multi: true }); 

@Directive({ 
    selector: 'input[format]', 
    host: { '(input)': 'onMyChange($event.target.value)' }, 
    providers: [CUSTOM_VALUE_ACCESSOR] 
}) 
export class NumbersValueAccessor extends DefaultValueAccessor { 
//... 
} 

Тогда я использую его как

@Component({ 
    templateUrl: 'frequencyPage.html' 
    , moduleId: module.id 
    , directives: [/*...*/ NumbersValueAccessor] 
}) 
export class FrequencyPage //... 

и в HTML, как

<input format="{number:true}" [(ngModel)]="test.alpha"/> 

Это получает экземпляр все правильно, но глядя на угловой код скомпилированного шаблона JIT:

self._DefaultValueAccessor_32_3 = new jit_DefaultValueAccessor3(self.renderer,new jit_ElementRef18(self._el_32)); 
    self._Token_NgValueAccessor_32_4 = [ 
    self._DefaultValueAccessor_32_3, 
    self._DefaultValueAccessor_32_3 
    ] 
    ; 
    self._NgModel_32_5 = new jit_NgModel5(null,null,null,self._Token_NgValueAccessor_32_4); 
    self._NgControl_32_6 = self._NgModel_32_5; 
    self._NgControlStatus_32_7 = new jit_NgControlStatus7(self._NgControl_32_6); 
    self._NumbersValueAccessor_32_8 = new jit_NumbersValueAccessor8(self.renderer,new jit_ElementRef18(self._el_32)); 

он создан ПОСЛЕ ngModel, поэтому не передается ему, поэтому, когда я фактически редактирую вход, это имя доступа по умолчанию, которое вызывается. Что мне не хватает?


EDIT: Одна вещь, которую я нашел: если вместо расширения DefaultValueAccessor я переописать ControlValueAccessor с нуля, это работает. Является ли это ошибкой в ​​компиляторе шаблонов angular2?

ответ

1

Это ошибка в компиляторе шаблона angular2?

Да Это, уже есть несколько вопросов в GitHub:

https://github.com/angular/angular/issues/9146#issuecomment-230410616

Похоже, декораторы не могут переопределить метаданные из angular2-классов.


Больше вопросы, которые связаны с этой ошибкой метаданных:

https://github.com/angular/angular/issues/9758

https://github.com/angular/angular/issues/8925

+1

Ну, с простым обходным путем и существующих проблемами на GitHub, моя работа здесь закончена :) – TDaver

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