2017-02-06 5 views
2

구성 요소의 값 속성에 Angular2로 액세스하려면 어떻게합니까? 구성 요소 코드에서angular2 - 참조 <input> 값을 변경하는 구성 요소의 템플릿 참조 변수

<input #myInput (keyup.enter)="onInput(myInput)"/> 

: 템플릿에서

import {ElementRef} from '@angular/core'; 
... 
onInput(latLngInputElement: ElementRef) { 
    // I want to access the value property of the <input> element here, and 
    // modify it so that it is reflected back in the template. 

내가 코드에 myInput.value를 전달할 수 있다는 것을 알고,하지만 난 참조가 필요 그래서이 함수를 사용하여 요소의 .value 속성을 업데이트 할 수도 있습니다.

전역 변수에 대한 양방향 바인딩을 포함하지 않는 방법이 있는지 알고 싶습니다. 가능하면 전역 변수가 거의없는 것이 좋다고 생각하기 때문입니다. 감사!

답변

2

Angular의 솔루션은 입력 모델을 구성 요소의 변수에 양방향으로 바인딩하는 것입니다. Typescript의 문서에 따라 let을 사용하여 var를 선언하는 경우 전역 범위를 더럽 힙니다.

전역 변수에 대한 양방향 바인딩을 포함하지 않는 방법이 있는지 알고 싶습니다. 전역 변수를 가능한 한 적게 가지고 있다고 생각하기 때문에 알고 싶습니다. 감사!

나는 이것을 이해하지만 ElementRef을 호출하는 것이 여기에있는 두 가지 악의 경우 더 나쁠 수 있습니다. 각도 문서는 Angular가 이미 DOM API를 처리하기 위해 많은 노력을 기울이고 있기 때문에이를 사용하지 않는 것이 좋습니다.

그러나 일 때 latLngInputElement.value에서 값을 가져올 수 있어야합니다.

당신은 깨끗한 솔루션을 찾고있는 경우 :

나는 매우 체크 아웃하는 것이 좋습니다 각도의 FormBuilder 하나의 템플릿 기반 대조적으로 모델 중심 양식을 구축 할 수 있습니다. 템플릿 대신 프로그램 적으로 페이지의 양식 값을 제어하는 ​​매우 우아한 방법입니다. Scotch.io에는 excellent blog post이 있습니다. 그것은 학습할만한 가치가 있습니다.

행운을 빈다.

+0

ReactiveForms를 사용하기 때문에 ngModel (반응 형 양식을 사용할 때 작동하지 않는다고 가정합니다)을 사용할 수 없으며 모든 formGroup 그룹에 하나의 더미 입력을 포함하고 싶지 않습니다. 사용자가 무언가를 입력하기 만하면되지만 프로그래밍 방식으로 작성된 양식에는 포함되지 않아야합니다 (하지만 시각적으로 다른 사용자와 함께 있어야하므로 어디에도 넣을 수 없습니다). 또한 특정 행동을 취한 후에도 그 가치를 설정할 수 있어야합니다. – MrCroft

+0

내 템플릿에는''이 있습니다. 그러면, @ViewChild ('myInput')을 사용하여 참조를 얻습니다. inputElement : ElementRef;' 콘솔에'this.myInput.nativeElement.value' 로그가 있으면 값을 얻습니다. 그러나 this.myInput.nativeElement.setAttribute ('value', 'xxx');는 아무 것도하지 않습니다. 내가 뭔가 잘못하고 있는거야? build에 에러가 없기 때문에'setAttribute'가 유효한 메소드라고 가정합니다. 자동 완성리스트에서 선택하기 만하면됩니다.나는 또한'@ViewChild ('myInput') inputElement : HTMLInputElement;를 시도했지만, 사용할 수있는'value()'또는'setValue()'메소드는 없다. – MrCroft

+0

'ReactiveFormsModule'을 사용하고 FormGroup을 설정했다면''을 사용하여'FormControl'에 입력을 할당 할 것입니다.'FormGroup'을 통해 필드와 상호 작용할 수 있습니다 , 즉'formGroupName.controls [ 'controlName']. setValue (value)'입니다. 엄지 손가락처럼 * 항상 * Angular로 DOM과 상호 작용하지 마십시오. 이 프레임 워크는 당신을 위해 그것을 수행합니다. – joh04667