ng click如果为true,则在false时解析为true

时间:2016-04-14 08:50:44

标签: javascript angularjs

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而非!=可能会导致一些问题。

我将支持大部分答案(因为你们所有人都是对的,而不是我)并接受帮助我理解最多的东西。谢谢大家!

5 个答案:

答案 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'"