范围输入不会反映模板驱动表单中的默认值(Angular 2)

时间:2017-10-02 09:53:04

标签: html5 angular angular-forms

我希望我的范围输入加载默认值为0.当页面加载时,每个输入默认设置为中间。当我检查元素时,我看到了这个

<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"
>

我也像这样动态创建我的变量

//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;

    }
}

我尝试将值设置为UserResponse[respName],但输入上的value属性只显示为单词value,旁边没有相等的值。我来回取出value属性,只留下ngModel内容,并注释掉设置默认值的函数部分,看看是否只有value属性单独工作时没有来自函数的任何其他干扰,并且传递的值是相同的结果,但输入设置在中间。我尝试将其设置为1只是为了查看0是否正在制作null,但这没有任何区别。

我甚至将value文件中针对该输入的每个问题的json属性更改为1,并且它在检查中显示但未更改默认位置输入。有人可以说明为什么会发生这种情况以及如何解决这个问题?如果你需要看看还有什么,那么这是整个机制的Plunkr

1 个答案:

答案 0 :(得分:1)

如果您更改模板,

[attr.value]="ans.value"

要,

[(ngModel)]="ans.value"

它应该在范围输入视图中将值初始化为零(在plunker中确认)。不知道你在模板中使用其他ngModel做了什么。