AngularJS:动态地将局部视图加载到页面中

时间:2013-05-16 13:45:09

标签: angularjs partial-views

创建我的第一个AngularJS应用程序。

ng-repeat :er加载标题。每个标题都是可点击的。单击标题时,ajax调用会获得更多JSON数据。我需要在点击的标题下面添加这些数据。

通常情况下,我会将HTML创建为字符串并将其附加到源代码中。但由于我使用的是AngularJS,因此应该有一种方法可以使用HTML创建局部视图,并在其中创建另一个 ng-repeat

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我会根据@Nicolas建议使用指令。将此与@Andrew建议你可以做的事情相结合。

控制器:

.controller('MainCtrl', function ($scope, $http) {
    $scope.items = [
        {id: 'a', subItems: []},
        {id: 'b', subItems: []}
    ];

    $scope.getSubItems = function(id) {
        $http.get('/sub-items/' + id)
            .then(function() {
                $scope.items.subItems = $scope.items.subItems.push(response.data);
            });
    }
});

查看:

<div ng-repeat="item in items">
  <a ng-click="getSubItems(item)">{{item.id}}</a>
  <list sub-items="item.subItems"></list>
</div>

指令:

.directive('list', function() {
    return {
        restrict: 'E',
        scope: {
          subItems: '=subItems'
        },
        template: '<ul>' +
            '<li ng-repeat="subItem in subItems">{{subItem.id}}</li>' +
          '</ul>'
    };
});

答案 1 :(得分:0)

这是一个小例子:你的JSON结构简单,每个项目的json对象都有subItems数组。

JS:

function MyCtrl($scope, $http) {
  $scope.items = [ {id: 'a', subItems: []}, {id: 'b', subItems: []} ];

  $scope.getSubItems = function(item) {
    $http.get('/sub-items/' + item.id).then(function(response) {
      //Append the response to the current list of subitems 
      //(incase some exist already)
      item.subItems = item.subItems.concat(repsonse.data);
    });
  };
}

HTML:

<div ng-repeat="item in items">

  <a ng-click="getSubItems(item)">{{item.id}}</div>
  <div ng-show="item.subItems.length">
    <h4>SubItems:</h4>
    <ul>
      <li ng-repeat="subItem in item.subItems">{{subItem}}</li>
    </ul>
  </div>

</div>