1

この問題がスタックオーバーフローで何度か尋ねられたことは知っていますが、適切な答えが見つかりませんでした。

私が達成する必要があるのは、あるコントローラーで非同期呼び出しを開始し、結果が返されたときに他のコントローラーで $scope を更新できるようにすることです。

$http を実際に実行する共有サービスを使用する必要があることは理解していますが、他のコントローラー スコープを更新することができません。

これが私のコードです:

意見

<div class="screens" ng-controller="framesController">
   <div class="scroller scroll-pane" frames-scroll-pane>
         <div class="overview"> 
              {{frames}}                      
         </div>
   </div>
</div>

サービス

 angular.module('BrightspotApp.models', []).
    factory('framesModel', function($http,globals){
       var api_path = 'clickard/GetClickardById/'; 
       var sharedService = {};

       sharedService.getAsync = function (id) { 
            sharedService.frames = {};

            $http.get(globals.serverUrl + api_path + id).
                success(function (data, status, headers, config) {
                    sharedService.frames = data;

                }).error(function (data, status, headers, config) {
                    console.log('HTTP error');
                });

        };

        return sharedService;

      });

コントローラー

angular.module('BrightspotApp.controllers', []).

/**
* Top menu controller
*/
controller('menuController', function($scope,framesModel){
    $scope.clicked = false;
    $scope.toggle = function (item) {       
        $scope.clicked = !$scope.clicked;
        if ($scope.clicked){
               framesModel.getAsync(1);
        }
    };

    $scope.itemClass = function(item) {
        return $scope.clicked ? 'active' : undefined;
    };
}).
/**
 * Frames controller
 */ 
controller('framesController', function($scope,framesModel){

    $scope.data = [];
    $scope.frames = framesModel;
    });

このようなことは、非同期呼び出しが返されたときに実際に $scope を更新し、結果として DOM を更新するという意味で機能します。

しかし、私が達成する必要があるのは、非同期が終了したときに (おそらく $broadcast で) コールバックを取得してフレームコントローラーに通知し、返されたデータを制御して、$scope を更新する前に操作できるようにすることです。ドム。

助けていただければ幸いです。

4

1 に答える 1