具有标题视图的角度ng-repeat

时间:2013-03-22 18:49:51

标签: php javascript twitter-bootstrap angularjs

这里很有棱角分明,这对我来说很光鲜。我知道ng-repeat的基本用法,我可以轻松生成一个列表。

<ul>
  <li ng-repeat="presentation in presentations">
    {{presentation.title}}
  </li>
</ul>

我有一个从PHP返回的数组:

presentations = Array
(
    [0] => stdClass Object (
            [collection] => Collection A
            [title] => Title 1a
        )
    [1] => stdClass Object (
            [collection] => Collection A
            [title] => Title 2a
        )
    [2] => stdClass Object (
            [collection] => Collection B
            [title] => Title 1b
        )
    [3] => stdClass Object (
            [collection] => Collection B
            [title] => Title 2b
        )
    [4] => stdClass Object (
            [collection] => Collection C
            [title] => Title 1c
        )
    [5] => stdClass Object (
            [collection] => Collection C
            [title] => Title 2c
        )
    [6] => stdClass Object (
            [collection] => Collection C
            [title] => Title 3c
        )
)

您会注意到每个对象都有一个collection

我需要基本上为每个集合创建一个标题视图。我需要它显示如下:

COLLECTION A
    - Title 1a
    - Title 2a
COLLECTION B
    - Title 1b
    - Title 2b
COLLECTION C
    - Title 1c
    - Title 2c
    - Title 3c

只有标题可以点击。仅仅ng-repeat可以做到这一点吗?我知道我可以在PHP中将每个集合分类为单独的数组。我应该先做吗?我想尽可能使用ng-repeat,我只是不确定如何处理这个问题。

我计划使用twitter bootstrap

nav-list中显示此列表

nav-list

1 个答案:

答案 0 :(得分:2)

使用指令可能还有其他方法可以达到这个目的但

http://beta.plnkr.co/KjXZInfrDK9eRid2Rpqf

您定义要调用的函数以显示或隐藏标题:

// just a hard coded list of objects, we will output a header when the title changes
$scope.presentations = [{"title":"a", "other":"something else"},{"title":"a", "other":"something else"},{"title":"b", "other":"something else"},{"title":"b", "other":"something else"}, {"title":"b", "other":"something else"}]
$scope.currentTitle = '-1';
$scope.CreateHeader = function(title) {
      showHeader = (title!=$scope.currentTitle); 
       $scope.currentTitle = title;
      return showHeader;
}

你的HTML看起来像这样:

<ul>
    <li ng-repeat="presentation in presentations">
      <div ng-show="CreateHeader(presentation.title)">
        {{presentation.title}} is the header
      </div>
      {{presentation.other}} is an attribute on the collection item
   </li>
</ul>