如何在ajax get之后让Angular更新集合

时间:2014-04-30 02:07:52

标签: javascript jquery angularjs typescript

我一直在玩Angular,我正试图让它与jQuery承诺更新列表。如果我创建数组restaurantItems数组,从一开始就填充了对象,那么它按预期工作,但是当我使用回调进行推送时,它似乎从未看到我添加的项目。我通过代码进行了调试,我知道所有的东西都是用我期望的值调用的,但是实际的视图永远不会被更新。我试过$ watch / $ watchCollection,但要么我做错了,要么我误解了。这是我现在的代码。

export class Controller {
    public static $inject = [
        '$scope',
        '$location'
    ];
    constructor(private $scope:IActiveOrderController, private $location:ng.ILocationService) {
        $scope.restaurantItems = [];
        var test = function(x)
        {
            debugger;
            for (var i = 0; i < x.length; i++) {
                $scope.restaurantItems.push(x[i]); // Verified this does actually push the correct object on the array.
            }
        };
        ActiveOrderRepository.getActiveOrderItemsForActiveOrder(1).done(test);
    }
}

1 个答案:

答案 0 :(得分:1)

$ watchCollection对我很好。

你提到你正在使用jQuery的承诺 如果你在角度使用第三方库。 Angular可能不知道$ scope已更新。

你应该使用$ scope。$ apply。

例如

$.get(...).then(function(data){
$scope.$apply(function(){
    $scope.data = data
})
})