Angular - 如何为可选输入属性设置默认值

标签 angular typescript angular-components

我想知道在 Angular 组件中为可选属性设置默认值的“Angular/Typescript 方式”是什么?当传递给可选属性的值是 null 时,我遇到了麻烦或 undefined .

目前我有这样的事情:

export class FooComponent implements OnInit {
  @Input() foo = 'foo';
  @Input() bar = 0;
  @Input() baz?: string;
}

如果声明默认值,则不必指定类型,因为它是指定值的类型,默认情况下属性是可选的。 bar就是这种情况和 foo特性。

或者,您可以使用 ?标记此属性是可选的,但您不能声明其默认值。 baz就是这种情况属性(property)。

现在让我们看看当您将不同的值传递给这些属性时会发生什么。
<app-foo-component
  [foo]
  [bar]="null"
  [baz]="undefined"
>
</app-foo-component>

如果我控制台记录这些属性,这就是我得到的:
foo将正确 'foo'bar将是 nullbaz将是 undefined
当传递的值为空/未定义时,是否有一种优雅的方法也可以设置默认值,或者我是否需要像这样在 OnInit 中进行一些检查?
OnInit() {
  this.bar = this.bar || 0;
}

感觉有一些方法可以做到这一点。对我来说,可选属性意味着值可能丢失、为空或未设置,但是当我想设置默认值时,它仅在属性丢失或为空时才有效。在这些情况下,它仍然将 value 设置为 null 或 undefined,这似乎令人困惑。

最佳答案

Here is the PROPER best solution for this. (ANGULAR 7,8, 9)



寻址方案 : 设置 @Input 变量的默认值 .如果没有值传递给该输入变量,则它将采用默认值。

例子:

我有一个名为 car 的对象接口(interface):
export interface car {
  isCar?: boolean;
  wheels?: number;
  engine?: string;
  engineType?: string;
}

您制作了一个名为 的组件应用车您需要使用 传递汽车的属性的地方@input Angular 装饰器 .但你想要那个 isCar 车轮 属性必须有一个默认值(即.. isCar: true,wheels: 4)

您可以按照以下代码为该对象设置默认值:
export class CarComponent implements OnInit {
  private _defaultCar: car = {
    // default isCar is true
    isCar: true,
    // default wheels  will be 4
    wheels: 4
  };

  @Input() newCar: car = {};

  constructor() {}

  ngOnInit(): void {

   // this will concate both the objects and the object declared later (ie.. ...this.newCar )
   // will overwrite the default value. ONLY AND ONLY IF DEFAULT VALUE IS PRESENT

    this.newCar = { ...this._defaultCar, ...this.newCar };
   //  console.log(this.newCar);
  }
}

更详细的文章请引用 this .

引用 Destructuring assignment从这里

关于Angular - 如何为可选输入属性设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56005848/

相关文章:

javascript - 拦截器 Angular 6 中的刷新 token (JWT)

javascript - 删除 Angular 7 中的项目后如何更新过滤后的数组?

Angular :TypeError:无法读取 null 的属性 'firstCreatePass'

javascript - Angular 2 : Cannot read property 'then' of undefined for push notification

javascript - 使用 NodeJS 从 AWS S3 流式传输文件

html - 创建一个 Angular 组件来显示一组 html 表格单元格以嵌入到其他表格中

angular - 我可以自定义 Angular 全局错误处理程序,使其不仅仅是一个错误参数吗?

angular - 如何使用 Bootstrap 4 不使用 JQuery 在 Angular 应用程序中实现自动完成输入字段

css - 如何更改 Angular 6 Material 单选按钮外部波纹颜色

javascript - 从 ng-click 调用时,Angularjs 绑定(bind)不起作用