2017-10-02 4 views
0

내 범위 입력을 기본값 0으로로드하고 싶습니다. 페이지를로드 할 때 기본적으로 가운데 입력이 설정됩니다. 내가 요소를 검사 할 때 난 당신이 값이 실제로 전달 된 볼 끝이범위 입력은 템플릿 기반 양식 (각도 2)에서 기본값을 반영하지 않습니다.

<input 
    class="form-control ng-untouched ng-pristine ng-valid" 
    step="1" 
    type="range" 
    ng-reflect-model="" 
    name="my_own_job" 
    id="bus_info_04_a_01_01" 
    min="0" 
    max="10" 
    value="0" 
> 

모든 방법을 참조하십시오. 여기에 입력하는 같은 방법에 의해 *ngFor의 내부 모습입니다.

<input class="form-control" type="range" step="1" 
    [attr.name]="ans.ctrlName" 
    [attr.id]="ans.id" 
    [attr.min]="Data.loExtreme" 
    [attr.max]="Data.hiExtreme" 
    [attr.value]="ans.value" 
    [(ngModel)]="UserResponse[ans.respName]" 
    #{{ans.respName}}="ngModel" 
> 

나는 또한 내가 UserResponse[respName]에 값 만 입력에 value 속성을 설정하는 노력이

//From parent component 
@Input() Data : Question; 

//For dynamic variables for ngModel 
UserResponse : { [ propName : string ] : string } = {}; 

//Function called in OnInit 
loadResponses(){ 

    let data  : any   = this.Data; 
    let control : string  = data.ctrlName; 
    let response : string  = data.respName; 
    let multiResp : Array<any> = data.answers; 
    let defVal  : string  = ''; 
    let load  : Array<string> = []; 

    load.push(control); 

    if(response == '' || response == undefined){ 

     if(this.Template == 'multi_fader'){ 

      multiResp.forEach(resp => { 

       this.UserResponse[ resp.ctrlName ] = resp.answer; 
       this.UserResponse[ resp.respName ] = 0; 

      }); 

     } 
     else { 

      multiResp.forEach(resp => { 

       this.UserResponse[ resp.ctrlName ] = resp.answer; 
       this.UserResponse[ resp.respName ] = defVal; 

      }); 
     } 
    } 
    else { 

     load.push(response); 
     load.forEach(ctrl => { this.UserResponse[ ctrl ] = defVal; }); 

     this.UserResponse[ this.Data.ctrlName ] = this.Data.question; 

    } 
} 

같은 동적 내 변수를 만드는거야가 바로 옆에 필적와 단어 value으로 표시됩니다 그것. 앞뒤로 value 속성을 모두 꺼내서 ngModel 항목 만 남기고 기본값을 설정하는 함수의 부분을 주석 처리하여 value 속성 만이 함수에서 오는 다른 간섭없이 작동하는지 확인하고 값은 통과되었지만 입력은 중간에 설정되는 것과 같은 결과였습니다. 나는 어쩌면 0null을 만들었는지 알아보기 위해 1으로 설정하려고했지만 아무런 차이가 없었습니다.

json 파일의 입력에 대한 각 질문의 value 속성을 변경하여 1으로 변경 했는데도 검사에서 나타나지만 입력의 기본 배치는 변경되지 않습니다. 누군가 이런 일이 일어나는 이유와 그것을 고치는 방법에 대해 밝혀 줄 수 있습니까? 다른 일이 무엇인지 알아야 할 경우 여기에 전체 메커니즘 중 Plunkr이 있습니다. 그것은 (plunker에서 확인) 범위의 입력 뷰 값을 0으로 초기화한다

[(ngModel)]="ans.value" 

템플릿으로 변경하면

답변

1

[attr.value]="ans.value" 

. 템플릿에서 다른 ngModel으로 무엇을하고 있는지 확실하지 않습니다.

+1

대답에서 말했듯이, 내가 한 모든 것은 'question-shell.component.html'의 257 행에있는'[attr.value]'를'[(ngModel)]'로 변경 한 것뿐입니다. 템플릿에 다른 [(ngModel)] = "UserResponse [ans.respName]"'(라인 # 258)이 있습니다. 당신은 아마도 당신의 논리에 따라 그것을 바꿔야 만 할 것입니다. – amal

+0

예. 나는 그것을 바꿔 치기하고 등록한 것을 보았습니다. 여러분이 이야기하고있는 다른 ngModel은 입력에 바인딩하기 위해 만든 동적 변수의 값을 통해 ans.value를 제공하려는 시도였습니다. 왜냐하면'UserResponse [resp.name]'은 함수에서 값을 읽어 들이기 때문에'ans.value'와 같은 값을 제공하기 때문에 정말 당황 스럽습니다. – Optiq

+1

나는 둘 다 같은 가치를 지녔다고 생각하지 않는다! questions.json에서 resp.name = 와 달리 value = 0을 참조하십시오. 예를 들어 답변 목록의 한 요소를 보자. { "대답"\t : "내가 좋아하는 일을하는 자신의 직업을 만드는 방법", "id"\t : "bus_info_04_a_01_01", "value"\t : "0" "ctrlName"\t : "my_own_job", "respName"\t : "my_own_job_resp"} – amal