Łuk*_*man 21 javascript angularjs
用例很简单:我有两个控制器共享相同的依赖项MyService
.这项服务是持有一些状态,让我们坐下来myVariable
.如果我设置它ControllerOne
,那么它也会被发现ControllerTwo
.
我想要的是每个控制器拥有它自己的实例MyService
,因此myVariable
可以由每个控制器更改而不影响另一个.
换句话说 - 我希望通过依赖注入返回新实例,而不是单例.
Ben*_*esh 21
不像你希望的那样直接.服务器实例是在第一次被注射器检索并由注射器维护时创建的......换句话说,它们总是单体.魔术发生在这里,特别是看看provider
函数,它将提供者实例放在providerCache对象中.
但是,不要失去希望,如果您愿意,可以轻松地为您想要在服务中共享的内容添加构造函数:
app.factory('myService', [function() {
var i = 1;
function Foo() {
this.bar = "I'm Foo " + i++;
};
return {
Foo: Foo
};
}]);
app.controller('Ctrl1', function($scope, myService) {
$scope.foo = new myService.Foo();
console.log($scope.foo.bar) //I'm Foo 1
});
app.controller('Ctrl2', function($scope, myService) {
$scope.foo = new myService.Foo();
console.log($scope.foo.bar) //I'm Foo 2
});
Run Code Online (Sandbox Code Playgroud)
编辑:正如OP指出的那样,还有$ injector.instantiate,您可以使用它来调用控制器之外的JavaScript构造函数.我不确定这里可测试性的含义是什么,但它确实为您提供了另一种方法来注入将为您构造新对象的代码.
归档时间: |
|
查看次数: |
11261 次 |
最近记录: |