我希望在范围内的数组中有特定值时触发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'"
谢谢!
答案 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
时更新效率可能更高效。