2016-09-22 60 views
0

这是一个相对简单的问题,但我不明白为什么这不起作用。角ng如果多个条件不起作用

因此,我有HTML中的ng-if语句,我检查条件如果它不是真的。如在:

<div class="new-asset" data-ng-if="$root.questionData.question_type_id != '1' || $root.questionData.question_type_id != '8'"> 

但由于某种原因,这是行不通的。我也试过:

<div class="new-asset" data-ng-if="($root.questionData.question_type_id != '1' || $root.questionData.question_type_id != '8')"> 

它没有任何影响......我读了,并试图找到一个解决方案,有人建议将在控制器中的状态,这也将有性能提升(不是100%肯定,如果它会),如:

$scope.addNewAssetIf = $root.questionData.question_type_id != '1' || $root.questionData.question_type_id != '8'; 

,然后引用它的HTML作为:

<div class="new-asset" data-ng-if="addNewAssetIf"> 

但我不能使用这种方法由于异步加载和相关性。我需要以某种方式完成这项工作,即使question_type_id是1,我也不会收到任何错误或任何错误,但仍显示.net-asset div。如果我删除OR语句,并且只有1个条件有效:

<div class="new-asset" data-ng-if="$root.questionData.question_type_id != '1' || $root.questionData.question_type_id != '8'"> 

任何帮助表示赞赏。

感谢

+0

在我看来,'question_type_id!='1'|| question_type_id!='8''总是返回'true' – devqon

+0

你确认它是否返回一个数字作为字符串而不是实际的数字? – Tomer

回答

2

我忽略了与角度有关的所有事情,并试图理解条件背后的基本逻辑。如果ID == 1不符合第二个条件,它要求它不同于8?对于ID为8的情况,情况并非如此吗?

换句话说,你不需要& &而不是||?

这应该是一个评论,但我没有足够的声望。

+0

传说......! :)我知道这是一件简单的事情......我想我可能在这里得到了我自己的逻辑错误哈哈:)谢谢 – TSlegaitis

1

尝试使用功能:

$scope.addNewAssetIf = function() { 
    return $root.questionData.question_type_id != '1' || $root.questionData.question_type_id != '8'; 
}; 
+0

感谢您的回答,问题是在addNewAssetIf()运行后,数据被加载。由于其他依赖关系,我无法改变这一点。我知道我们没有生活在理想世界,但理想情况下我需要HTML版本才能工作:/ – TSlegaitis

+0

如果您没有使用函数,那么addNewAssetIf的值将是静态的。使用一个函数创建一个动态返回,它在每个摘要循环中以角度刷新。这意味着一旦你的异步方法完成并且questionData的值被改变,这个值将被刷新。 – tys

0

你能尝试使用$rootScope代替$root和包括$rootScope作为控制器的依赖?这个问题可能只是因为变量不在范围之内。您也可以将其分配给您的$scope,然后直接在您的模板中引用它。

基本上,这个想法是尝试查看值是否与您的模板绑定。你甚至可以尝试

{{$root.questionData.question_type_id}}</div>

为了验证这一点,然后如果没有,通过解决根源入手。