我有一个HTTP资源,它返回数据库中前10个实体的JSON列表。 我这样称呼它:
var filter= "john";
var myApp = angular.module('myApp', []);
myApp.controller('SearchController', ['$scope','$http', function ($scope, $http) {
$http.get('/api/Entity/Find/' + filter). //Get entities filtered
success(function (data, status, headers, config) {
$scope.entities = data;
}).
error(function () {
});
}]);
有效!
但是......如何更改filter
变量才能更改查询?
我应该重写整个控制器以使其工作吗?
很抱歉我的问题不明确。当我问这个时,我无法承担任何AngularJS。
我最初的意图是注入变量$http
,而不依赖于为此创建控制器。
谢谢大家。
答案 0 :(得分:20)
如果您不想将其放入控制器中,您可以将其注入配方(例如,提供商,工厂,服务): https://docs.angularjs.org/guide/providers
myApp.factory('getStuff', ['filter', '$http', function (filter, $http) {
//Blah
}]);
丹尼斯给出的方法有效;但是,如果在自动引导角度之前调用它,则它不起作用。此外,似乎德里克与丹尼斯的错误有关。方法,因为他没有jquery。
Exlord提到的解决方案更好,因为它没有那个问题,而且更合适:
$http = angular.injector(["ng"]).get("$http");
<强>解释强>
角度注射器是:
可用于检索服务和依赖注入的对象
https://docs.angularjs.org/api/ng/function/angular.injector
函数angular.injector将模块作为参数并返回注入器的实例。
因此,在这种情况下,您将检索ng模块的注入器(angular&#39; s),然后检索服务$ http。
注意:强> 使用像这样的注射器时要记住的一件事是,在我自己的研究结果中,你似乎需要确保在注射中包含模块,你是什么&#34;得到&#34;需要。例如:
angular.injector(['ng', 'ngCordova']).get('$cordovaFileTransfer')
答案 1 :(得分:8)
关于你的问题&#34; ...从外部控制器调用$ http.get&#34;你可以做到以下几点:
... ANYWHERE IN YOUR CODE
var $http = angular.element('html').injector().get('$http');
$http.get(...).success(...);
ANYWHERE IN YOUR CODE ...
请参阅棱角分明的官方文档:angular $injector docs:
get(name);
方法Returns an instance of the service.