ng-click
标记上有<i>
个事件,如下所示:
ng-click="parent.Status != 'Open' || (item.Status='Retrospect')"
因此,如果 parent.Status 不等于打开,那么项目状态将设置为 Retrospect ,这没关系。
但我想要另一张支票,我想看看这个项目是否可编辑,为此我有一个bool变量edit
。我自然就是这样写的:
ng-click="parent.Status != 'Open' && edit || (item.Status='Retrospect')"
所以,我认为如果 parent.Status 不等于打开并且编辑等于 true 我的 item.Status < / em>将被更新,问题是它被更新,无论edit
是真还是假(认为这是因为第一次检查是真的,所以它不关心edit
)
我也尝试过这样,但同样的问题:
ng-click="(parent.Status != 'Open' && edit) || (item.Status='Retrospect')"
..使用( )
我错过了什么?这不可能吗?
编辑:似乎这样做:
ng-click="parent.Status != 'Open' || (item.Status='Retrospect')"
如果 parent.Status !='打开'resovles到false
,item.Status 将设置为'Retrospect',但问题仍然存在。
此外,我认为可能会有一些混淆,我不检查parent.Status != 'Open'
或item.Status='Retrospect'
我运行命令{ {1}} 如果 item.Status='Retrospect'
等于 parent.Status != 'Open'
我的不好好的,我现在很困惑,但我的代码确实有效,问题是我对false
ng-click
评估的理解,也使用过true/false
而非!=
可能会导致一些问题。
我将支持大部分答案(因为你们所有人都是对的,而不是我)并接受帮助我理解最多的东西。谢谢大家!
答案 0 :(得分:3)
此类陈述称为短路陈述。 但按照“||”
的规则public class GroupsRequest
{
public string Name { get; set; }
public int Count { get; set; }
}
在上面,始终执行和评估statement1,但只有当statement1的计算结果为false时才执行statement2。
相反,“&amp;&amp;”的规则是
statement1 || statement2
在上面,始终执行和评估statement1,但只有当statement1的计算结果为true时才执行statement2。
在控制台中查看以下内容 -
statement1 && statement2
仅当(parent.Status!='Open'&amp;&amp; edit)评估为false时,状态才会更新。
您可以参考 - http://sampsonblog.com/tag/short-circuit-evaluation
希望这有帮助。
答案 1 :(得分:1)
(item.Status='Retrospect')
应为(item.Status === 'Retrospect')
...
否则,您正在测试赋值的返回值,该值始终为true
... :-)。
作为旁注,请始终使用类型转换相等比较(===
==
!==
用于!=
JavaScript)...(有关完整而明确的解释,请参阅here)。
更新:从你的评论中我看到你真正的意思是你写的...... :-)
但是,在这种情况下,我会这样做:
if (!(parent.Status !== 'Open' && edit)) item.Status = 'Retrospect'
或:
item.Status = (parent.Status !== 'Open' && edit) ? item.Status : 'Retrospect'
答案 2 :(得分:1)
在||
构造中,如果第一个条件(parent.Status != 'Open' && edit)
为false,则item.Status将更新,如果为真则不会更新。您的第一个代码应该以相同的方式工作
写作可能更清晰,更少混淆:
if (parent.Status != 'Open' && edit) {item.Status = 'Retrospect';}
答案 3 :(得分:1)
我认为你最好在函数中扩展代码。
在Html中:
ng-click="doThing()"
在javascript中:
doThing() {
if((parent.Status != 'Open') && edit) {
item.Status = 'Retrospect';
}
}
答案 4 :(得分:0)
ng-click="parent.Status != 'Open' && edit = true? item.Status='Retrospect' : item.Status='Somethingelse or null'"