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

时间:2015-02-07 03:48:36

标签: javascript jquery angularjs

我想忘记" 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工具?

4 个答案:

答案 0 :(得分:4)

当然,您可以在run block

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

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

答案 1 :(得分:3)

使用此:

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

答案 2 :(得分:1)

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

var myAjax;
App.controller('Ctrllr', ['$http', function ($http) {
  myAjax = $http;
});

myAjax("url.js").success(function(code){eval(code)}

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

答案 3 :(得分:0)

你做不到。但那很好,你不应该。

您应该做的是使用工厂设置服务,然后您的控制器或任何您想要的工具可以访问该工厂。工厂看起来像这样......

app.factory('service', ['$http', function($http) {
   var service = {}

   service.get = function() {
     return $http.get('/url');
   }
   return service.
 }]);

然后你可以把这个服务注入你想要的任何东西,并可以从那里调用get函数,这将为你返回承诺。

编辑:澄清一下,你不必回复你可以用你想象的承诺。