内联中的多个语句if

时间:2014-12-17 19:31:57

标签: angularjs conditional-operator

是否可以在AngularJS表达式的内联if语句中包含多个语句?例如,以下失败:

ng-change="someCondition() ? doA(); doB() : doC()"
ng-change="someCondition() ? doA(), doB() : doC()"

这可以按如下方式完成:

ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''"

但那很丑,两次调用someCondition(),并且在控制器中发出尖叫声。有没有办法让第一个例子起作用?

4 个答案:

答案 0 :(得分:5)

角度表达式仅限于简单表达式。解析器可能会拒绝任何更复杂的内容,并且会抛出错误。阅读文档中Angular Expressions vs. JavaScript Expressions之间的差异。即:

  • 无控制流语句:您不能在Angular表达式中使用以下内容:条件,循环或异常。

  • 无逗号和无效操作符:您无法在Angular表达式中使用,void

您可以做的最好的事情是在控制器中创建一个将doAdoB组合在一起的函数。它不仅会让Angular解析得很开心,而且代码本身也会变得更清晰,更简洁。毕竟这是模板,最好保持简单。

答案 1 :(得分:3)

你的第一个例子不是有效的javascript。 你的第二个例子包含,,它不能在任何角度表达式中(不确定是否有效的javascript)。

根据您的使用情况,您有时可以使用&&||将其投放使用。

但是,模板中的代码仍然是代码。尽量使其可读。如果您无法将其读取,请将其解压缩到控制器中的函数中。

ng-change="onChange()"

答案 2 :(得分:1)

请尝试以下情形:::

在多个语句中使用()

ng-change =“ someCondition?(doA(),doB()):doC()”

ng-change =“ someCondition?(doA(),doB()):doC()”

答案 3 :(得分:0)

我在 Angular 8 中使用三元运算符

尝试了类似的操作
<input 
maxlength="{{memberProofForm.proofTypeId === 1?16:(memberProofForm.proofTypeId === 2?10:(memberProofForm.proofTypeId === 3?15:77))}}"
name="proofIdNumber" 
required 
type="text"
[(ngModel)]="memberProofForm.proofIdNumber">

它会像这样

if(memberProofForm.proofTypeId === 1){
    return 16;
}
}else{
    if(memberProofForm.proofTypeId === 2){
        return 10;
    }else{
        if(memberProofForm.proofTypeId === 3){
            return 15
        }else{
            return 77;
        }
    }
}