如何在控制器之外使用$http?AngularJS中

How to use $http outside of a controller? in AngularJS

本文关键字:http AngularJS 控制器      更新时间:2023-09-26

我想忘记"jQuery",因为我喜欢"AngularJS"。然而,我需要知道如何使用独立的任务,这些任务在我的应用程序的其他地方包含AngularJS。例如,在这种情况下,我想使用"$https AngularJS"函数来导入JavaScript文件。

示例(它曾在jQuery中执行):

$.get("url.js", function(data){ eval(data) }); //ok
console.info($.get); //code code code... ok

示例(如AngularJS中所述)

//In a controller
App.controller('Ctrllr', ['$http', function ($http) {
    $http.get("url.js").success(function(data){
        eval(data); //ok
    });
    console.info($http); //code code code.... ok
})
//outside
$http.get("url.js"); //$http is undefined
//How to use $http here?

正如您在上一次调用中看到的,$http在进程之外。现在,我想知道,如何在控制器/应用程序之外使用类$http或其他Angular utils?

使用此:

$http = angular.injector(["ng"]).get("$http");

当然可以在运行块中使用$http

angular.module('myModule', [])
.run(function($http) {$http.get('/url').success(mySuccessCallback)}

但是您仍然必须在角度上下文(应用程序)中使用$http,因为需要依赖注入来注入$http服务

谢谢大家,我认为唯一的解决方案是声明一个全局变量,然后为这个变量分配一个控制器$https

var myAjax;
App.controller('Ctrllr', ['$http', function ($http) {
  myAjax = $http;
});
myAjax("url.js").success(function(code){eval(code)}

如果有人有更好的解决方案,欢迎。问候语:)

你不能那样做。但没关系,你不应该。

你应该做的是使用一个工厂来设置一个服务,然后你的控制器或任何你想要的东西都可以访问这个工厂。一个工厂看起来像这样。。。

app.factory('service', ['$http', function($http) {
   var service = {}
   service.get = function() {
     return $http.get('/url');
   }
   return service.
 }]);

然后,您可以将此服务注入到您想要的任何东西中,并可以从那里调用get函数,该函数将为您返回promise。

编辑:为了澄清,你不必回报你可以发挥想象力的承诺。