typescript 为什么不能将字符串传递给@input

4urapxun  于 2023-05-08  发布在  TypeScript
关注(0)|答案(3)|浏览(168)

我已经为我的应用程序开发了一个触摸友好的微调器,但是当我将名称传递给微调器子组件时,它总是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)
  }
}
0kjbasz6

0kjbasz61#

你会得到错误,因为当你试图像这样传递值时:[spinName]="macroCarbs",它会在组件中搜索名为macroCarbs的变量。如果你传递的值没有[],像这样:spinName="macroCarbs",那么它就可以工作了。另外,当你向数字输入传递值时,不要使用""

ymdaylpp

ymdaylpp2#

只需从[spinName]="macroCarbs"中删除[]
这就是你得到的:

<kg-spinner spinName="macroCarbs" ...></kg-spinner>
mwg9r5ms

mwg9r5ms3#

尝试通过:

[spinName]="'macroCarbs'"

而不是

[spinName]="macroCarbs"

在html调用中

相关问题