角度js指令的编译或链接功能中的条件逻辑?

时间:2013-12-01 09:03:08

标签: angularjs angularjs-directive angularjs-scope

我在$scope中有一个名为data的JSON对象。该对象有一个名为items的成员,它可以是Object或Object of Array。因此我不能使用ng-repeat:

<ul>
    <li ng-repeat="item in data.items">
        <item data="item"></item>
    </li>
</ul>

...因为如果data.items是一个对象,它会为<item>中的每个成员创建一个data.items指令。但是,如果data.items是一个数组,那么工作正常。我以为我可以这样做:

<span ng-if="angular.isObject(data.items)">
    <span ng-if="angular.isDefined(data.items)">
          <item data="data.item"></item>
    </span>
</span>

但是这不起作用,我猜是因为我需要isObject和isDefined的参数是一个可以解析的表达式,但是在{{}}}中包装参数只会导致语法错误。

然后我想我可以创建一个指令来检查项目并修改编译函数中的模板元素,但是这需要访问$ scope上的数据,而编译函数没有。我认为链接功能为时已晚,无法修改模板?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

<ul ng-if="data.items.length>0">
    <li ng-repeat="item in data.items">
        <item data="item"></item>
    </li>
</ul>

<span ng-if="data.items && !(data.items.length>0)">
  <item data="data.items"></item>
</span>