Angularjs 安格拉斯混合工厂
我见过一些示例,其中方法作为mixin添加到AngularJS控制器。 例如:Angularjs 安格拉斯混合工厂,angularjs,Angularjs,我见过一些示例,其中方法作为mixin添加到AngularJS控制器。 例如: (function () { var app = angular.module('angularjs-starter', []); var ParentCtrl = function ($scope, $location) { $scope.path = function () { return $location.absUrl(); }; }; app.control
(function () {
var app = angular.module('angularjs-starter', []);
var ParentCtrl = function ($scope, $location) {
$scope.path = function () {
return $location.absUrl();
};
};
app.controller('ChildCtrl', function($scope, $injector) {
$injector.invoke(ParentCtrl, this, {$scope: $scope});
$scope.url = $scope.path();
});
})();
(function () {
var app = angular.module('angularjs-starter', []);
app.factory('CalculatorFactory', function() {
return {
add: function(arg1, arg2) {
return arg1 + arg2;
}
}
});
app.controller('MainCtrl', function($scope, CalculatorFactory) {
angular.extend($scope, CalculatorFactory);
// $scope now has the `add() fn`
var result = $scope.add(1, 2);
});
})();
我希望能够将新方法作为“混合”添加到工厂中。
我该怎么做?不可能将$scope传递到工厂
例如,以下操作不起作用:
var serv = angular.module('myModule', [])
serv.factory('myService', ['$scope', '$injector', function ($scope, $injector) {
...
您可以使用来实现这一点,它将源对象的所有属性复制到目标对象中
例如:
(function () {
var app = angular.module('angularjs-starter', []);
var ParentCtrl = function ($scope, $location) {
$scope.path = function () {
return $location.absUrl();
};
};
app.controller('ChildCtrl', function($scope, $injector) {
$injector.invoke(ParentCtrl, this, {$scope: $scope});
$scope.url = $scope.path();
});
})();
(function () {
var app = angular.module('angularjs-starter', []);
app.factory('CalculatorFactory', function() {
return {
add: function(arg1, arg2) {
return arg1 + arg2;
}
}
});
app.controller('MainCtrl', function($scope, CalculatorFactory) {
angular.extend($scope, CalculatorFactory);
// $scope now has the `add() fn`
var result = $scope.add(1, 2);
});
})();
你们不应该把范围传给工厂。这就是阻止您尝试做的事情的原因吗?我正在寻找一种方法来进行混音,以添加工厂方法。我提出的所有混音示例都是针对控制器的。在我发现的控制器示例中,始终使用$scope。控制器通常将作用域注入其中,而工厂则没有。您可以将rootScope注入工厂,但通常这是一种糟糕的做法。我希望能够向工厂或服务的方法中添加一些方法。有没有其他方法可以做到这一点?你可以将工厂注入到几乎任何有角度的组件中,并用其他方法和属性来装饰它。还有其他方法可以扩展它们。如果您想要更详细的答案,请更新您的问题,并提供有关您目标的更多细节。