【问题标题】:Why is typescript setting my value to a 'undefined' string instead of an undefined?为什么打字稿将我的值设置为“未定义”字符串而不是未定义?
【发布时间】:2021-03-19 08:48:04
【问题描述】:

我有一个选择下拉菜单,我将第一个值设置为未定义。

但问题是,如果我选择一个下拉值,然后选择第一个值(“全部”),那么我的绑定变量最终会变成一个字符串“未定义”,它实际上将它从一个数字更改为一个字符串。

memberParams.membership // is a :number and I don't want it to be converted to a string

并且 memberTypes 是一个名称/值对

export interface IMemberType {
   value: number;
   name: string;
}

为什么会这样,我该如何预防?

this.memberTypes = [{value: undefined, name: 'All'}, ...response.memberships];
<select class="form-control custom-select w-100" name="memberType" [(ngModel)]="memberParams.membership">
  <option *ngFor="let memberType of memberTypes" [value]="memberType.value">
    {{memberType.name}}
  </option>
</select>

【问题讨论】:

  • 您可以完全省略value 并使用*ngIf member.value else all 吗?
  • 否,因为 memberTypes 是一个具有名称/值对的接口
  • 那为什么不把这个值设为可选呢? undefined 不是数字,因此对象已经在谎报其类型。
  • 可选是什么意思?
  • @user1186050 可以改成value?: number;

标签: javascript html typescript


【解决方案1】:

HTML value 属性始终是数字或字符串。所以,没有办法在 Angular 模板中修复它。但是,在您的组件内部,您可以拥有可以正确更改值的 setter 和 getter。

在你的组件内部:

get membership() {
  return this.memberParams.membership;
}

set membership(value: string | number) { 
  this.memberParams.membership = val === "undefined"? undefined : value;
}

您只需在模板中做一点小改动,即将[(ngModel)] 绑定从memberParams.membership 更改为membership

【讨论】:

  • 嗨,席德。虽然我认为这会起作用,但我不会将其标记为已接受的答案,因为我认为我正在寻找其他东西。仅供参考 - 此值作为搜索查询的一部分传递给我的控制器,当我设置此值时,它需要是一个数字或未定义/空值。我对数字的检查只是“如果(值)”-> 然后设置 http 参数。我可以通过添加另一个检查“if (!'undefined') 来轻松修复它。您的答案有效,但需要比仅仅进行额外检查更多的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2016-11-06
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多