【问题标题】:Set Value as 0 if its is Null in Angular如果它在 Angular 中为 Null,则将值设置为 0
【发布时间】:2021-06-28 11:50:32
【问题描述】:

我想传递一个变量的值,如果它为空,那么在 Angular 中调度它时自动将其值设置为 0

    this.myForm = this.formBuilder.group({
        id: [null, Validators.required],
        productPrice: [0],
        finalPrice: [0],
        remarks: [null],
    });
    
    
    onCreate(form: FormGroup) {
      console.log(form.value)
      this.store.dispatch(form.value)
    }

【问题讨论】:

    标签: angular ecmascript-6 angular-reactive-forms


    【解决方案1】:

    一种方法是使用Array#reduceObject.keys() 函数手动检查值,或者在值为nullundefined 时使用|| 以使用0

    试试下面的

    onCreate(form: FormGroup) {
      const value = Object.keys(form.value).reduce((acc, curr) => {
        acc = { ...acc, [curr]: form.value[curr] || 0 };  // update: `curr` must be `[curr]`
        return acc;
      }, Object.create(null));     // update: closing curly brace
    
      console.log(value);
      this.store.dispatch(value);
    }
    

    【讨论】:

    • 你能检查一下你的语法吗?
    • @Joseph:抱歉,我已经更新了代码。右大括号不见了。
    • 它只显示这样curr: 1
    • @Joseph:我这边的另一个错误。 curr: ... 必须是 [curr]:... 才能解释值而不是文字 curr。请重试。
    • @Joseph:另外,如果 || 不能按预期工作,您可以按照 @Alex 的建议尝试无效的合并运算符 ??
    【解决方案2】:

    如果左手为空,您可以使用 nullish 合并运算符返回参数的右手边

    const a = null;
    const b = 5;
    
    console.log( a ?? 0 ); // returns 0
    console.log( b ?? 0 ); // returns 5
    
    

    如果您确实想在评估后设置左侧,也可以将此运算符与赋值 ??= 一起使用。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多