[英]Angular.js Call $http.get from outside controller
我有一个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
注入,而不依赖于为此创建控制器。
谢谢大家
如果您不想将其放入控制器中,则可以将其注入到配方中(例如,供应商,工厂,服务): https : //docs.angularjs.org/guide/providers
myApp.factory('getStuff', ['filter', '$http', function (filter, $http) {
//Blah
}]);
丹尼斯给出的方法有效; 但是,如果在启动angular之前调用它,则不起作用。 而且,似乎Derek的Dennis方法有错误,因为他没有jquery。
Exlord提到的解决方案更好,因为它没有这个问题,并且更合适:
$http = angular.injector(["ng"]).get("$http");
解释:
角度喷射器是:
可用于检索服务以及依赖项注入的对象
https://docs.angularjs.org/api/ng/function/angular.injector
函数angular.injector将模块作为参数,并返回注入器的实例。
因此,在这种情况下,您将为ng模块(角度)检索注入器,然后检索服务$ http。
注意:像这样使用注入器时要记住的一件事是,在我自己的发现中,您似乎需要确保在注入中包括需要“获取”的模块。 例如:
angular.injector(['ng', 'ngCordova']).get('$cordovaFileTransfer')
关于您的问题“ ...从外部控制器调用$ http.get”,您可以执行以下操作:
... ANYWHERE IN YOUR CODE
var $http = angular.element('html').injector().get('$http');
$http.get(...).success(...);
ANYWHERE IN YOUR CODE ...
请参阅angular的官方文档: angular $ injector docs : get(name);
方法Returns an instance of the service.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.