如何使用ng-click动态重新加载ng-repeat数据?

时间:2013-07-23 16:55:13

标签: angularjs angularjs-directive angularjs-ng-repeat

我有一个包含ng-repeat指令的页面。页面首次加载时ng-repeat有效,但我希望能够使用ng-click刷新ng-repeat的内容。我尝试了以下代码,但它不起作用。有什么建议吗?

<div ng-click="loadItems('1')">Load 1st set of items</div>
<div ng-click="loadItems('2')">Load 2nd set of items</div>
...

<table>
    <tr ng-repeat="item in items">>
        // stuff
    </tr>
</table>

ItemsCtrl:

$scope.loadItems = function (setID) {
    $http({
        url: 'get-items/'+setID,
        method: "POST"
    })
    .success(function (data, status, headers, config) {
        $scope.items = data;
    })
    .error(function (data, status, headers, config) {
        $scope.status = status;
    });
};

我希望我对loadItems()的调用会导致ng-repeat指令重新加载从我的服务器获取的新数据。

1 个答案:

答案 0 :(得分:10)

在回调中添加广播并在您的控制器中订阅。

这应该是服务btw

itemsService.loadItems = function (setID) {
    $http({
        url: 'get-items/'+setID,
        method: "POST"
    })
    .success(function (data, status, headers, config) {
        $scope.items = data;
        $rootScope.$broadcast('updateItems', data);
    })
    .error(function (data, status, headers, config) {
        $scope.status = status;
    });
}; 

在您的控制器中:

$scope.$on("updateItems",function(d){
  $scope.items = d;
});

所以只要你ng-click="update(id)"

$scope.update = function(id){
    itemsService.loadItems(id);
}

您的items会因订阅而自动更新。