我有三个控制器是非常相似的。我想有一个控制器,这三个扩展和共享其功能。
也许你不扩展控制器,但可以扩展控制器或使单个控制器混合多个控制器。
module.controller('CtrlImplAdvanced',['$scope','$controller',function ($scope,$controller) { // Initialize the super class and extend it. angular.extend(this,$controller('CtrlImpl',{$scope: $scope})); … Additional extensions to create a mixin. }]);
当父控制器被创建时,其中包含的逻辑也被执行。
有关详细信息,请参阅$ controller(),但只需传递$ scope值。所有其他值将正常注入。
@mwarren,你的关注是通过Angular依赖注入自动魔法。所有你需要的是注入$ scope,虽然如果需要可以覆盖其他注入的值。
请参见以下示例:
(function(angular) { var module = angular.module('stackoverflow.example',[]); module.controller('simpleController',function($scope,$document) { this.getOrigin = function() { return $document[0].location.origin; }; }); module.controller('complexController',$controller) { angular.extend(this,$controller('simpleController',{$scope: $scope})); }); })(angular);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script> <div ng-app="stackoverflow.example"> <div ng-controller="complexController as C"> <span><b>Origin from Controller:</b> {{C.getOrigin()}}</span> </div> </div>
虽然$ document不会传递到’simpleController’,当它被创建的’complexController’$ document为我们注入。