我已经为我的应用程序开发了一个触摸友好的微调器,但是当我将名称传递给微调器子组件时,它总是null或undefined。我需要做什么来让微调子组件识别传入的字符串?
下面是对子组件的html调用:
<div class="ui-grid-col-8 spinnerMargin">
<kg-spinner [spinName]="macroCarbs"
[range]="[10,50]"
[increment]="5"
[startValue]="20"
(onChanged)="onChanged($event)"></kg-spinner>
</div>
在父零部件中:
onChanged(sr: SpinnerReturn) {
if (sr.spinName === "macroCarbs") {
(<FormControl>this.macroForm.controls['macroCarbs']).setValue(sr.spinValue);
} else if(sr.spinName === "macroProtein") {
(<FormControl>this.macroForm.controls['macroProtein']).setValue(sr.spinValue);
} else if(sr.spinName === "calorieDifference") {
(<FormControl>this.macroForm.controls['calorieDifference']).setValue(sr.spingValue);
}
子组件:
import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core';
import { SpinnerReturn } from '../../interfaces/spinnerReturn';
@Component({
selector: 'kg-spinner',
templateUrl: './app/shared/spinner/kgSpinner.component.html',
styleUrls: ['./app/shared/spinner/kgSpinner.component.css']
})
export class KgSpinnerComponent implements OnInit {
@Input() startValue: number;
@Input() range: number[];
@Input() increment: number;
@Input() spinName;
@Output() onChanged = new EventEmitter<SpinnerReturn>();
curValue: number;
lowerLimit: number;
upperLimit: number;
name: string;
sr: SpinnerReturn;
constructor() {
this.sr = new SpinnerReturn();
}
ngOnInit() {
this.lowerLimit = this.range[0];
this.upperLimit = this.range[1];
this.curValue = this.startValue;
}
onIncrement() {
this.curValue = this.curValue + this.increment;
this.returnEvent();
}
onDecrement() {
this.curValue = this.curValue - this.increment;
this.returnEvent();
}
returnEvent() {
this.sr.spinValue = this.curValue;
this.sr.spinName = this.spinName;
this.onChanged.emit(this.sr)
}
}
3条答案
按热度按时间0kjbasz61#
你会得到错误,因为当你试图像这样传递值时:
[spinName]="macroCarbs"
,它会在组件中搜索名为macroCarbs
的变量。如果你传递的值没有[]
,像这样:spinName="macroCarbs"
,那么它就可以工作了。另外,当你向数字输入传递值时,不要使用""
。ymdaylpp2#
只需从
[spinName]="macroCarbs"
中删除[]
:这就是你得到的:
mwg9r5ms3#
尝试通过:
而不是
在html调用中