angularjs不会更新已更改的范围对象

时间:2015-04-30 13:30:03

标签: javascript angularjs

我的角度控制器包含由Google Maps api更新的名为的阵列。

function MyCtrl($scope) {
    var items = [
        "arizona", "texas"
    ];

    $scope.places = items;
}

我已将数组绑定到名为 places 的范围变量。 Google Maps API会隐式更改项目,但更改不会显示在视图页面中。

<div ng-controller="MyCtrl">    
    <p>{{places.length}}</p>
</div>

如果我在 $ cope.places 中添加或删除项目,则会更新。但是如果我在项目数组中添加项目,则不会更新。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

将商品设为$ scope变量,或投放商品,只需让Google Maps API更新$ scope.places

答案 1 :(得分:0)

我可能过于简单化了,但Angular基本上会对变化进行民意调查。它以一种有助于提高性能的智能方式实现,但如果在Angular范围之外更改了值,则Angular不会立即意识到它们。

基本上,只要Angular执行任何代码(例如ng-click事件),它就会在代码执行后检查更改。如果Google Maps API正在更改数据,那么在再次检查之前,Angular不会发现这些更改。

最好的解决方案是让Angular知道这些更改何时发生(希望Google API有一个钩子),这通常是通过调用$scope.$apply()来完成的,如果没有,你可以随时使用Angular&#39 ; s $interval服务偶尔运行一个方法,该方法不需要实际执行任何操作,但在运行后,Angular将检查更改。