2016-11-06 4 views
1

Обратитесь к коду ниже, всякий раз, когда изменяется входное значение, вызывается функция обмена текстовыми сообщениями. Однако свойство text InputMaskComponent никогда не изменяется. Не уверен, что случилось с моим кодом.Угловая 2 двойная привязка данных на входном элементе не работает

InputMaskComponent.ts

import { Component, ViewChild, AfterViewInit, ElementRef, Attribute } from '@angular/core'; 

@Component({ 
    selector:'inputs:mask', 
    templateUrl:'InputMaskComponent.html' 
}) 
export class InputMaskComponent{ 
    pattern: string; 
    text: string; 
    dom: Element; 
    constructor(el:ElementRef, @Attribute('pattern') pattern:string){ 
     this.dom = el.nativeElement; 
     this.pattern = pattern; 
    } 
    textchange(event:any){ 
     console.log(this.text, event); 
    } 

} 

InputMaskComponent.html

<div> 
    <input type="text" 
      [placeholder]="pattern" 
      (input)="textchange($event)" 
      [(value)]="text" /> 
    <span #child class="hidden"><ng-content></ng-content></span> 
</div> 

RootComponent.html

<input:mask pattern="(###) ### - ###">(012) 345 - 678</input:mask> 
+1

является то, что '(вход),' [(значение)] '? почему вы не используете '[(ngModel)]'? – micronyks

+0

Согласен. Почему вы не используете '[(ngModel)]'? – yurzui

+0

@micronyks и @yurzui правы, вы должны использовать директиву NgModel для двусторонней привязки, но ваш случай требует разбить ее на две части - '[ngModel]' и '(ngModelChange)', потому что вы хотите вызвать когда вход изменяется. Замените '[(значение)]' на '[ngModel]' и '(input)' на '(ngModelChange)', и все будет работать как шарм. –

ответ

0
[(value)]="text" 

означает, что вы свяжете

  • text свойства класса компонентов к value свойству <input> элемента
  • valueChange события в обработчик события text = $event

но <input> элемента Безразлично 't испустить событие valueChange.

Смотрите также https://angular.io/docs/ts/latest/guide/template-syntax.html#!#two-way

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