我正在构建的应用程序有多个视图,每个视图都有自己的控制器。我的所有控制器都以相同的方式启动,并且在一种方法中有所不同;
$scope.a = ... // same for all controllers
$scope.b = ... // same for all controllers
$scope.c = function(){...} // same for all controllers
$scope.d = function(){...} // is different for each controller
他们说保持你的控制器很薄,并用服务将它们分解。 但是如果我把a,b,c放在一个服务中,它们将在所有控制器之间共享,我希望每个控制器在自己的范围内保留自己的a,b,c。 我不是在尝试共享数据,只是代码。
所以我创建了一个引用父作用域的指令,并在自己的控制器中声明了常见的东西。它解决了我的问题,但是你可以推荐一个最好的做法吗?
答案 0 :(得分:3)
如果将控制器方法定义为范围属性,则可以使用简单的mixin方法使用常用方法扩展每个范围对象。
假设您使用可重用方法定义对象:
var mixin = {
a: function() { return this.name; },
b: function() {},
c: function() {}
};
然后当您需要这些方法时,只需将它们混合到当前$scope
:
app.controller('Controller1', function($scope) {
$scope.name = 'One';
// Create common methods
angular.extend($scope, mixin);
// Define unique method
$scope.d = function() {};
});
内部mixin方法this
将指向单个$scope
对象。
以下是该方法的演示。