复合ng-if表达式未执行

时间:2014-04-09 21:07:18

标签: javascript angularjs

假设我有以下代码:

<div ng-if="Array.isArray(list)" ng-repeat="item in list">{{item}}</div>
<div ng-if="!Array.isArray(list)"> Not a list </div>

表达式总是评估为不是列表。为什么呢?

Plunker:http://plnkr.co/edit/jlH0z3tLN6qbRowD5NGQ?p=preview

2 个答案:

答案 0 :(得分:5)

查看角度文档:

  

上下文

     

Angular不使用JavaScript的eval()来计算表达式。相反,Angular的$ parse服务处理这些表达式。

     

与JavaScript不同,其中names默认为全局窗口属性,Angular表达式必须显式使用$ window来引用全局窗口对象。例如,如果要在表达式中调用alert(),则必须使用$ window.alert()。这种限制是故意的。它可以防止意外访问全局状态 - 这是微妙错误的常见来源。

http://docs.angularjs.org/guide/expression

答案 1 :(得分:1)

或多或少地试试这个:

   scope.list = [1,2,3,4,5,6];
   //scope.list = 'test';

   scope.isArr = function(arr){
     return Array.isArray(arr);
   }

然后:

  <div ng-repeat="item in list" ng-show="isArr(list)">{{item}}</div>
  <div ng-show="!isArr(list)">foobarbazz</div>

取消注释scope.list =&#39; test&#39;看到结果。这非常草率,但它得到了重点。