繁体   English   中英

Angular.js从外部控制器调用$ http.get

[英]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
}]);

如果要在任何角度结构之外获取$ http实例,则可以执行以下操作。

丹尼斯给出的方法有效; 但是,如果在启动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 docsget(name); 方法Returns an instance of the service.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM