1

这是我的代码:

function MainCtrl($scope) {
    $scope.thisarray = globalObj;

    $scope.loadthis = function (index) {
        return thisarray[index];
    }
}

这是标记:

<table ng-controller="MainCtrl">
    <tr>
        <td ng-repeat="element in thisarray">
            {{loadthis($index)}}
        </td>
    </tr>
</table>

我正在通过SOAP回调加载一些数据:

    SOAPCLient.invoke(url, methodName, pl, true, function(obj) {globalObj = obj;

    **angular.bootstrap("html");**//here is where I try to reinitialize the app 

});

如果您查看SOAP呼叫,我bootstrap会重新初始化应用程序,但它一直没有工作。loadthis不显示 HTML 表内的任何数据。有人能帮我一下吗?

4

2 回答 2

1

每次从外部源获得数据时,您不应该重新初始化 AngularJS 应用程序。与其销毁和重新创建 AngularJS,不如在范围对象上使用 $apply 方法。

伪代码(在您的控制器中)如下所示:

SOAPCLient.invoke(url, methodName, pl, true, function(obj) {
    $scope.apply(function(){
        $scope.thisarray = obj;
    });
});

此外,如果我正确理解您的代码,您将为转发器(ng-repeat)中的每个项目调用 SOAP 调用,而您的 SOAP 调用为所有对象带回数据。因此,更好的方法是进行 SOAP 调用(如上面的代码片段),将数据分配给范围内的变量,然后让 ngRepeat 发挥作用。

我可能会误解您在这里尝试实现的目标,因此在您的代码中使用 jsFiddle / plunker 将有助于提供更详细的响应。

于 2012-08-19T07:21:59.780 回答
1

您可以使用 $.watch 监听 SOAP 的更改,然后在尝试强制推送时使用 $.apply。在此处查看如何使用的示例

于 2012-09-07T01:46:37.960 回答