刷新$ scope更改

时间:2014-03-14 02:52:04

标签: javascript jquery angularjs

通过路由交换ng-view。这是一些路由和控制器代码

var containers = [];
angular.module('AContainer',['ngRoute']).config(
function ($routeProvider){
    $routeProvider
    .when('/', {
        controller: containerListCtrl,
        templateUrl: '/closeAndUplift_containerList.html'
    });
}
);
function containerListCtrl($scope, $location){
    $scope.containers = containers;
}

这是div

<div id='containersDiv' ng-app='AContainer'>
    <div ng-view></div>
</div>

在此视图中(closeAndUplift_containerList.html)已加载,通过ng-repeat显示对象数组

<div>
<table>
    <thead>
    <th>Pallet id</th>
    </thead>
    <tr ng-repeat='container in containers'>
        <td><a href='#/edit/{{container.index}}'>{{container.id}}</a></td>
    </tr>
</table>

当jquery ajax回调导致更改时,会出现问题。 xhr调用包含在一个单独的库中,并传入一个回调函数。回调应该清除容器列表。回调执行:

var activeScope = $('#containersDiv').scope();
activeScope.$apply( function(){
    activeScope.containers = [];
});

但没有任何反应。旧值仍在显示。

编辑: 根据Rishul的建议,我重新安排了代码以利用$ http来使其工作。问题在于,虽然它是一种解决方法,但它并没有真正回答为什么我使用的方法不起作用的问题。 有人可以评论是否应该选择他的答案来解决问题吗?

1 个答案:

答案 0 :(得分:1)

使用 $ http 服务进行ajax调用,因为这个内置的角度js库将在获取响应时运行摘要周期,当你修改范围变量时,视图也会发生变化。

在你的情况下,jquery回调不会触发$ digest循环因此视图没有得到更新!请确认是否有效