2017-02-01 2 views
1

텍스트를 입력하는 간단한 구성 요소를 만들려고합니다. 값이 변경되면 오류가 발생했습니다.Angular2 - 양방향 바인딩의 오류 : 확인 후 표현식이 변경되었습니다.

이 오류에 대한 기사를 이미 확인했습니다. 그들 중 하나는 'enableProdMode()'를 사용해야한다고 말했습니다. 그건 사실이지만, 그것이 필수적인 해결책은 아니라고 생각합니다.

enableProdMode()보다 좋은 해결책을 알려주십시오.

@Component({ 
    selector: 'text-input', 
    template: '<input type="text" [(ngModel)]="value"/>', 
    inputs: [ 
     'value' 
    ] 
}) 
export class TextInput implements DoCheck { 
    @Input() value: string; 
    @Output() valueChange: EventEmitter<string> = new EventEmitter(); 

    ngDoCheck(): void { 
     console.log(`ngDoCheck: value=${this.value}`); 
     this.valueChange.emit(this.value); 
    } 
} 

-

@Component({ 
    template: ` 
     <h1>Input Components</h1> 
     <h2>Text Input</h2> 
     <div> 
      <text-input [(value)]='textValue'></text-input> 
     </div> 
     <div>{{textValue}}</div>` 
}) 
export class InputsPage { 
    textValue: string = 'Hello World'; 
} 
+0

필자는 단지 입력에서 괄호를 제거해야한다고 생각합니다 :''. 두 가지 way-databinding이 없어야하기 때문에 오류가 발생한다고 생각합니다. –

+0

@alexkucksdorf 여기서 요점은 자식이 변경 될 때 부모에게 알릴 수 있도록하는 twoway 바인딩입니다. 따라서 twoway 바인딩이 필요합니다 :) – Alex

답변

0

당신은 단지 변화가 일어난 경우, 부모를 알리는 대신 ngModelChange를 사용하여 값을 방출 할 경우, 이에 대한 DoCheck를 사용할 필요가 없습니다. 그래서 ngModelChange

<input type="text" [(ngModel)]="value" (ngModelChange)="emitValue()"/> 

@Input() value: string; 
@Output() valueChange: EventEmitter<string> = new EventEmitter(); 

emitValue(): void { 
    this.valueChange.emit(this.value); 
} 

을 추가하십시오. 그러면 모두 좋을 것입니다. 희망이 도움이!

+0

조언 해 주셔서 감사합니다. 그것은 나를 위해 잘 작동합니다. 그것은 큰 도움이되었습니다 !! –

+0

도와 주셔서 감사합니다. :)이 답변으로 문제가 해결 된 경우 답변 투표에서 회색 눈금을 클릭하여 답변을 수락 하시겠습니까? 자세한 방법은 다음과 같습니다. http://meta.stackexchange.com/a/5235 :) – Alex

+0

규칙을 이해하지 못해 죄송합니다. 나는 그것을 닫은 상태로 표시하기 위해 그것을 클릭했다. stackoverflow에서 어떻게 행동하는지 말해 주셔서 감사합니다. –

관련 문제