我有三个非常相似的控制器.我想有一个控制器,这三个扩展和共享其功能.

推荐答案

也许you不能扩展一个控制器,但可以扩展一个控制器,或者使一个控制器成为多个控制器的混合体.

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', function($scope, $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在由"ComplController"创建时不会传递到"simpleController"中,但是会为我们注入$document.

Javascript相关问答推荐

React native在不首次加载时渲染的挂钩比上一次渲染期间渲染的挂钩更多

如何在Jest中调用setupFile下列出的文件所需的函数?

如何从defineExpose访问数据和方法

事件错误:类型错误:无法读取未定义的属性(读取stopPropagation)

我不明白这个react 组件有什么问题

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

Google图表时间轴—更改hAxis文本 colored颜色

当点击注册页面上的注册按钮时,邮箱重复

如何从隐藏/显示中删除其中一个点击?

JS—删除对象数组中对象的子对象

如何使用子字符串在数组中搜索重复项

Chart.js-显示值应该在其中的引用区域

当我在Reaction中创建一个输入列表时,我的输入行为异常

Reaction Redux&Quot;在派单错误中检测到状态Mutations

邮箱密码重置链接不适用于已部署的React应用程序

Reaction-SWR-无更新组件

如何防止ionic 输入中的特殊字符.?

如何在一个对象Java脚本中获取不同键的重复值?