我希望我的范围输入加载默认值为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。
答案 0 :(得分:1)
如果您更改模板,
[attr.value]="ans.value"
要,
[(ngModel)]="ans.value"
它应该在范围输入视图中将值初始化为零(在plunker中确认)。不知道你在模板中使用其他ngModel
做了什么。