javascript - 扩展 AngularJS Controller 的推荐方法是什么?

标签 javascript angularjs dry

我有三个非常相似的 Controller 。我想要一个 Controller ,这三个扩展并共享其功能。

最佳答案

也许不扩展 Controller ,但可以扩展 Controller 或使单个 Controller 成为多个 Controller 的混合。

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 时,其中包含的逻辑也会执行。 有关更多信息,请参阅 $controller(),但只需要传递 $scope 值。所有其他值将正常注入(inject)。

@mwarren,Angular 依赖注入(inject)会自动神奇地解决您的问题。您只需要注入(inject) $scope,但如果需要,您可以覆盖其他注入(inject)的值。 举个例子:

(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在被'complexController'创建时并没有传入'simpleController',但是$document是为我们注入(inject)的。

关于javascript - 扩展 AngularJS Controller 的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16539999/

相关文章:

javascript - AngularJS 无法加载 ng-view inti index.html

c++ - 使用 DRY 原则重构逻辑

javascript - GAE + Blobstore : Serve different image size depending on viewport width

javascript - 数据表:使用行分组,如何获取每个分组行的计数?

javascript - AngularJs 和 Angular-UI-Router 路由权限

java - 如何在 Java 8 中创建任意一次性 lambda 表达式?

java - Android应用DRY原则切换setOnCheckedChangeListener方法传递Object

javascript - 我如何将其从两个硬编码图像更改为图像数组。

javascript - 将 JSON 对象转换为 C# 列表

mysql - 如何从 angularjs 接收 JSON 数据到 laravel