2015-02-07 2 views
6

Я хочу забыть «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 или другой Угловой utils вне контроллера/приложения?

+0

, что вы имеете в виду снаружи? перед загрузкой контроллера? на каком событии связано с угловым контекстом? – micha

+0

перед загрузкой контроллера –

+0

Предоставляемые ответы не удовлетворяют вашему запросу? – ribsies

ответ

0

Вы не можете этого сделать. Но это нормально, вы не должны.

Что вам нужно сделать, это настроить службу с использованием фабрики, к которой могут быть доступны ваши контроллеры или что угодно. Завод выглядит следующим образом ...

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

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

Затем вы можете вводить эту услугу в все, что вы хотите и можете вызвать функцию ПОЛУЧИТЬ оттуда, который будет возвращать обещание для вас.

Редактировать: уточнить, вам не нужно возвращать обещание, которое вы можете использовать в своем воображении.

+0

Что такое downvote? – ribsies

+0

Потому что вы МОЖЕТЕ это сделать, а да, вы не должны. Также изготовление фабрики для доступа к сервису просто смешно. Прочтите его в следующий раз. –

+0

Хороший совет, вы должны прочитать его тоже! В том, как он это написал, это невозможно. Вы можете использовать какой-то сервис http за пределами углового контроллера, но не так. Я не думаю, что это смешное слово, которое вы ищете. Это стандартный способ сделать это, он делает его модульным и чистым/организованным. – ribsies

4

Конечно, вы можете использовать $ HTTP в run block

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

Но вам все равно придется использовать $http в угловом контексте (приложения), так как инъекции зависимостей необходимо вводить $http Service

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"); 
Смежные вопросы