1

アプリ階層の上位にあるコントローラーの 1 つからスコープの動作を共有して、関連のない/継承されていないスコープからのデータを一種の抽象的で別の「リモート コントロール」として管理できるようにすることはできますか?

これは、疑似角度で物事をセットアップする方法です:

//Looking to share the ManagedScope1 and ManagedScope2 "changeChannel()" behavior with this controller
<RemoteControlCtrl>
  <ng-click="managedScope1.changeChannel()"></ng-click>
  <ng-click="managedScope2.changeChannel()"></ng-click>
</RemoteControlCtrl>

//ManagedScopes inherit ChangeChannelCtrl scope behaviors
<ChannelChangeCtrl with $scope.changeChannel() method>
  <ManagedScope1></ManagedScope1>
  <ManagedScope2></ManagedScope2>
</ChannelChangeCtrl>

メソッドは両方の$scope.changeChannel()マネージド スコープで継承され、それに応じて独自のデータを操作できます。

4

2 に答える 2

0

ChannelService が必要です....

.service('ChannelService', function () {
    return {
        changeChannel: function (scopeData, callback) {
             //change the channel

             if (angular.isFunction(callback)) {
                  callback();
             }
        }
    };
});

使用法:

.controller('MyController', ['$scope', 'ChannelService', function ($scope, ChannelService) {
     $scope.dataForChangingChannel = {};
     $scope.changeChannel = function () {
          //do UI stuff here

          ChannelService.changeChannel($scope.dataForChangingChannel, function () {
                //or UI stuff here, after the channel has been changed
          });
     }
}]);
于 2013-09-13T13:03:03.263 に答える
0

スコープを生成したコンポーネントの種類によって異なります。

まったく関係のないスコープの場合は、 を使用する必要があります$broadcast$rootScopeリモコンと の依存関係としてrequire できます$rootScope.$broadcast('eventName', someData)。チャネルコントローラーで:

$scope.$on('eventName', function(event, data) {
    // Do something here
})

もう 1 つの良いアイデアは、サービスを使用することですが、別のスコープでメソッドを呼び出すことは依然として困難です。イベントブロードキャストは、あなたの問題に対する良いアプローチだと思います。

于 2013-09-13T20:53:06.257 に答える