解析仅适用于控制器吗?
是的,解析仅适用于控制器。
如果是这种情况,我如何在工厂/服务内使用解析?
请记住工厂和服务会回归单例对象,即第一次将工厂注入控制器时,它会运行您提供的任何实例化代码并创建一个对象,然后该工厂的任何后续实例化都会返回相同的对象。
换句话说:
angular.module('someModule')
.factory( 'SomeFactory' , function () {
// this code only runs once
object = {}
object.now = Date.now();
return object
);
SomeFactory.now
将是工厂第一次注入控制器的当前时间,但它not更新后续使用情况。
因此,工厂的决心概念并没有真正的意义。如果您想要一个动态执行某些操作的服务(这显然很常见),您需要将逻辑放在单例的函数内。
例如,在您提供的代码示例中,您的工厂依赖于一个模型。一种方法是使用您已经设置的解析方法将模型注入到控制器中,然后在单例上公开一个接受模型并执行您需要执行的操作的方法,如下所示:
angular.module('someModule')
.factory( 'SomeFactory', function () {
return {
doSomethingWithModel: function (model) {
$http.post('wherever', model);
}
});
.controller('SomeController', function (SomeFactory, model) {
SomeFactory.doSomethingWithModel(model);
});
或者,如果您根本不需要控制器中的解析值,请不要将其直接放入解析中,而是将解析逻辑放入服务单例上的方法中,并在解析中调用该方法,传递结果到控制器。
抽象对话很难变得更详细,因此如果您需要进一步的指导,请提供特定的用例。