是否可以在AngularJS表达式的内联if语句中包含多个语句?例如,以下失败:
ng-change="someCondition() ? doA(); doB() : doC()"
ng-change="someCondition() ? doA(), doB() : doC()"
这可以按如下方式完成:
ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''"
但那很丑,两次调用someCondition(),并且在控制器中发出尖叫声。有没有办法让第一个例子起作用?
答案 0 :(得分:5)
角度表达式仅限于简单表达式。解析器可能会拒绝任何更复杂的内容,并且会抛出错误。阅读文档中Angular Expressions vs. JavaScript Expressions之间的差异。即:
无控制流语句:您不能在Angular表达式中使用以下内容:条件,循环或异常。
无逗号和无效操作符:您无法在Angular表达式中使用,
或void
。
等
您可以做的最好的事情是在控制器中创建一个将doA
和doB
组合在一起的函数。它不仅会让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;
}
}
}