Angularjs 内联if中的多个语句
AngularJS表达式中的内联if语句中是否可能有多个语句?例如,以下操作失败:Angularjs 内联if中的多个语句,angularjs,conditional-operator,Angularjs,Conditional Operator,AngularJS表达式中的内联if语句中是否可能有多个语句?例如,以下操作失败: ng-change="someCondition() ? doA(); doB() : doC()" ng-change="someCondition() ? doA(), doB() : doC()" 这可以通过以下方式完成: ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''" 但这很难看,调用someCondi
ng-change="someCondition() ? doA(); doB() : doC()"
ng-change="someCondition() ? doA(), doB() : doC()"
这可以通过以下方式完成:
ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''"
但这很难看,调用someCondition()两次,然后尖叫着要在控制器中完成。有没有办法让第一个示例正常工作?您的第一个示例不是有效的javascript。 您的第二个示例包含
,
,它们不能是任何角度表达式(不确定javascript是否有效)
根据您的用例,您有时可以使用&&
和|
使其工作
然而,模板中的代码仍然是代码。尽量使它可读。如果无法使其可读,请将其提取到控制器中的函数中
ng-change="onChange()"
角度表达式仅限于简单表达式。解析器可能会拒绝任何更复杂的内容,并抛出错误。阅读文档中的不同之处。即:
- 无控制流语句:不能在角度表达式中使用以下语句:条件、循环或异常
- 无逗号和无效运算符:不能在角度表达式中使用
或、
Void
您可以做的最好的事情是在控制器中创建一个函数,该函数将结合
doA
和doB
。它不仅会使角度解析变得愉快,而且代码本身也会变得更干净,更易于阅读。所有这些都是模板,最好保持简单。请尝试以下场景:
在多个语句中使用()
ng change=“someCondition?(doA(),doB()):doC()
ng change=“someCondition?(doA(),doB()):doC()”我用三元运算符在角度8中尝试了类似的方法
<input
maxlength="{{memberProofForm.proofTypeId === 1?16:(memberProofForm.proofTypeId === 2?10:(memberProofForm.proofTypeId === 3?15:77))}}"
name="proofIdNumber"
required
type="text"
[(ngModel)]="memberProofForm.proofIdNumber">
你想做什么?你不应该在dom中做那么多逻辑。将其全部移动到一个函数,然后调用该函数。让js在dom中保持简单。@DigitalFiz我同意,但我觉得它很容易阅读(使用带有ng model=“email”的输入和带有ng model=“emailOptOut”)emailOptOut的复选框?emailCache=email,email=undefined:email=emailCacheAh,不知道关于禁止使用逗号或void(或关于RegEx或过滤器)的规定。ThanksdoA()可能会释放一个真实或虚假的值,所以如果我要走这条路(这很聪明,我也很喜欢),我就必须做ng change=“someCondition()?(doA()&&0)| doB():doC()
if(memberProofForm.proofTypeId === 1){
return 16;
}
}else{
if(memberProofForm.proofTypeId === 2){
return 10;
}else{
if(memberProofForm.proofTypeId === 3){
return 15
}else{
return 77;
}
}
}