1

是否可以从我的应用程序层次结构中较高的一个控制器共享范围行为,以便它能够将来自不相关/未继承范围的数据作为一种抽象和单独的“远程控制”来管理?

这就是我在psudo-angular中进行设置的方式:

//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

这取决于生成范围的组件类型。

如果它是完全不相关的范围,则应使用$broadcast. 您可以要求$rootScope作为远程控制器中的依赖项和$rootScope.$broadcast('eventName', someData). 在您的频道控制器中:

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

另一个好主意是使用服务,但这仍然很难在另一个范围内调用方法。我会说事件广播是解决您的问题的好方法。

于 2013-09-13T20:53:06.257 回答
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 回答