Javascript 工厂函数的依赖注入(AngularJS)
我有一些在不同控制器中使用的功能,我不想将其复制并粘贴多次到控制器中,而是想将其拉出并放置在工厂中 但是,当我试图通过AngularJavascript 工厂函数的依赖注入(AngularJS),javascript,angularjs,dependency-injection,angularjs-factory,Javascript,Angularjs,Dependency Injection,Angularjs Factory,我有一些在不同控制器中使用的功能,我不想将其复制并粘贴多次到控制器中,而是想将其拉出并放置在工厂中 但是,当我试图通过Angular{{expressions}}调用HTML中的函数时,它不起作用 相反,我在每个控制器的$scope中创建了调用工厂函数的函数,以便DOM可以读取表达式,但这似乎是多余的。有没有办法解决这个问题,这样我就可以简单地从工厂调用函数 以下是我最初尝试的: index.html: <div ng-controller="MyController"> T
{{expressions}}
调用HTML中的函数时,它不起作用
相反,我在每个控制器的$scope中创建了调用工厂函数的函数,以便DOM可以读取表达式,但这似乎是多余的。有没有办法解决这个问题,这样我就可以简单地从工厂调用函数
以下是我最初尝试的:
index.html:
<div ng-controller="MyController">
The rating of this item is: {{MakeGraph.getRating(whichItem)}}<br />
The votes of this item is: {{MakeGraph.getVotes(whichItem)}}
</div>
controllers.controller('MyController', ['$scope', 'MakeGraph', '$routeParams', function($scope, MakeGraph, $routeParams){
$scope.whichItem = $routeParams.itemId;
//no other reference to MakeGraph here
}])
app.factory('MakeGraph', function(){
var service = {};
service.getRating = function(itemNo){
...
return ...;
};
service.getVotes = function(itemNo){
...
return ...;
};
return service;
});
factory.js:
<div ng-controller="MyController">
The rating of this item is: {{MakeGraph.getRating(whichItem)}}<br />
The votes of this item is: {{MakeGraph.getVotes(whichItem)}}
</div>
controllers.controller('MyController', ['$scope', 'MakeGraph', '$routeParams', function($scope, MakeGraph, $routeParams){
$scope.whichItem = $routeParams.itemId;
//no other reference to MakeGraph here
}])
app.factory('MakeGraph', function(){
var service = {};
service.getRating = function(itemNo){
...
return ...;
};
service.getVotes = function(itemNo){
...
return ...;
};
return service;
});
相反,只有当我将MyController更改为具有以下内容时,我才能使其工作:
$scope.getRating = function(){
return MakeGraph.getRating(itemNo);
};
我可以修复这个问题,这样就不必在$scope内调用函数了吗?谢谢。向控制器添加
$scope.MakeGraph=MakeGraph
controllers.controller('MyController', ['$scope', 'MakeGraph', '$routeParams', function($scope, MakeGraph, $routeParams){
$scope.whichItem = $routeParams.itemId;
$scope.MakeGraph = MakeGraph
}])
然后可以从视图中访问MakeGraph
例如:
<a ng-click="MakeGraph.getVotes(12)"> Click me </a>
点击我
请注意,如果您在服务中返回承诺,您可能仍然需要将其包装到控制器中,以便正确处理.success/.then/.error…
事件,因此,DOM只能访问控制器中的$scope变量,即使某些内容已传递到控制器中(但没有在$scope上特别标记)?谢谢!一个快速的方法是角度。扩展($scope,MyService)