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、アプリを再初期化するために使用していますが、機能していません。loadthisHTML テーブル内のデータは表示されません。誰でもここで私を助けることができますか?

4

2 に答える 2

1

外部ソースからデータが到着するたびにAngularJSアプリケーションを再初期化するべきではありません。AngularJSを破棄して再作成する代わりに、スコープオブジェクトで$applyメソッドを使用する方法があります。

(コントローラー内の)擬似コードは次のようになります。

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

また、コードを正しく理解していれば、SOAP呼び出しがすべてのオブジェクトのデータを返している間に、リピーター(ng-repeat)の各アイテムに対してSOAP呼び出しを呼び出すことになります。したがって、より良いアプローチは、SOAP呼び出しを実行し(上記のスニペットのように)、スコープ内の変数にデータを割り当て、ngRepeatにその魔法を実行させることです。

私はあなたがここで達成しようとしていることを誤解しているかもしれないので、あなたのコードでjsFiddle / plunkerを持っていると、より詳細な応答を提供するのに役立ちます。

于 2012-08-19T07:21:59.780 に答える
1

$.watch を使用して SOAP への変更をリッスンし、プッシュを強制しようとするときに $.apply を使用できます。使用例はこちらをご覧ください

于 2012-09-07T01:46:37.960 に答える