2015-02-07 53 views
6

我想忘記「jQuery」,因爲我喜歡「AngularJS」。但是,我需要知道如何在我的應用程序中使用將AngularJS合併到別處的獨立任務。 在這種情況下,我想使用「$ https AngularJS」函數導入一個JavaScript文件,例如。

例(它用於做jQuery的):

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

//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? 

正如你在最後一次通話看到(AngularJS記錄),$ HTTP是在一個過程之外。現在,想知道如何在控制器/應用程序之外使用類$ http或另一個Angular utils?

+0

您被外界是什麼意思?控制器加載之前?哪個事件與角度上下文有關? – micha 2015-02-07 13:35:11

+0

加載控制器之前 – 2015-02-07 15:00:32

+0

提供的答案不能滿足您的要求嗎? – ribsies 2015-02-07 17:28:47

回答

0

你不能那樣做。但沒關係,你不應該。

你應該做的是使用工廠設置一個服務,然後可以通過你的控制器或任何你想要訪問的工廠。一個工廠看起來像這樣...

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

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

然後你可以注入該服務到你想要的東西,並可以從那裏調用get函數將返回承諾爲您服務。

編輯:爲了澄清,你不必退還承諾,你可以使用你的想象力。

+0

什麼是downvote? – ribsies 2015-02-07 10:45:58

+0

因爲你可以這樣做,而是的,你不應該這樣做。也使工廠訪問服務只是荒謬的。下次閱讀他的問題。 – 2015-12-08 20:47:23

+0

很好的建議,你也應該閱讀它!按照他寫的方式,這是不可能的。你可以在角度控制器之外使用某種HTTP服務,但不是那樣。我不認爲你正在尋找的詞是荒謬的。這是做到這一點的標準方式,它使模塊化和清潔/組織化。 – ribsies 2015-12-09 22:14:56

4

當然,你可以使用$ HTTP內run block

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

但你仍然有角上下文(應用程序)使用$http因爲需要依賴注入注入$http服務

1

謝謝大家,我認爲唯一的解決辦法是宣佈一個全局變量,然後爲此變量分配一個控制器$ https

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

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

如果有人有更好的解決方案是值得歡迎的。問候:)

3

使用此:

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