AngularJS - ng - 如果数组中有特定值

时间:2016-08-21 17:36:23

标签: angularjs angular-ng-if

我希望在范围内的数组中有特定值时触发ngIf

所以我的范围就是这个:

var orders = [{
    "order_no": 1,
    "color": ["blue", "pink", "red"]
}, {
    "order_no": 2,
    "color": ["yellow", "blue", "white"]
}];

我希望有一个ngIf显示一个元素,例如,如果其中一个颜色数组中存在黄色(假设我事先不知道数据范围,但知道结构中的前进)。

我发现这样做的唯一方法是事先知道范围的结构,所以fx ng-if="orders[1].color[0] === 'yellow'"

谢谢!

2 个答案:

答案 0 :(得分:11)

您可以在HTML模板中调用color数组的indexOf方法。这样,您就不需要使用其他方法污染$scope

以下是:ng-if="order.color.indexOf('pink') !== -1"

注意:不要忘记expressions in AngularJS are different。要记住的一个关键因素是它们是宽容的。

  

原谅:在JavaScript中,尝试评估未定义的属性会生成ReferenceError或TypeError。在Angular中,表达式求值是对undefined和null的宽容。

这意味着myCtrl.foo.bar.wa.la之类的内容会评估为undefined,但不会触发ngIf。您可以阅读更多相关信息here

答案 1 :(得分:2)

您可以将此作为函数表达式

执行
ng-if="hasYellow()"

$scope.hasYellow = () => $scope.orders.some(
  order => order.color.indexOf("yellow") > -1
);

根据orders的大小及其更改频率,只有hasYellow属性并更新orders时更新效率可能更高效。