2015-02-07 11 views
6

Voglio dimenticare "jQuery" perché mi piace "AngularJS". Tuttavia, ho bisogno di sapere come utilizzare le attività indipendenti che incorporano AngularJS altrove nella mia applicazione. In questa occasione voglio usare la funzione "$ https AngularJS" per importare un file JavaScript per esempio.

Esempio (ha usato per fare in jQuery):

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

Esempio (come documentato in 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? 

Come si vede nella ultima chiamata, $ HTTP è al di fuori di un processo. Ora, vorrei sapere come utilizzare la classe $ http o un'altra utilità angolare al di fuori di un controller/applicazione?

+0

cosa si intende per esterno? prima che un controller sia caricato? su quale evento è correlato al contesto angolare? – micha

+0

prima che venga caricato un controller –

+0

Le risposte fornite non soddisfano la richiesta? – ribsies

risposta

0

Non puoi farlo. Ma va bene, non dovresti.

Che cosa si dovrebbe fare è impostare un servizio utilizzando una fabbrica che può quindi essere letta dai controllori o qualsiasi altra cosa si desideri. Una fabbrica si presenta così ...

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

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

Poi si può iniettare questo servizio in tutto quello che vuoi e può chiamare la funzione get da lì che restituirà la promessa per voi.

Modifica: per chiarire, non è necessario restituire la promessa è possibile utilizzare la vostra immaginazione.

+0

Cos'è il downvote? – ribsies

+0

Perché puoi farlo, mentre si, non dovresti. Anche fare una fabbrica per accedere a un servizio semplicemente ridicolo. Leggi la sua domanda la prossima volta. –

+0

Un buon consiglio, dovresti leggerlo anche tu! Nel modo in cui l'ha scritto, non è possibile. Potresti usare qualche tipo di servizio http al di fuori di un controller angolare, ma non così. Non penso che la parola che stai cercando sia ridicola. Questo è il modo standard per farlo, lo rende modulare e pulito/organizzato. – ribsies

4

Sicuramente si può usare $ http all'interno di un run block

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

Ma si devono ancora utilizzare $http in un contesto angolare (applicazione), in quanto l'iniezione di dipendenza è necessaria per iniettare $http servizio

1

Grazie a tutti, Penso che l'unica soluzione sarebbe dichiarare una variabile globale e quindi assegnare un controller $ https per questa variabile

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

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

Se qualcuno ha una soluzione migliore è il benvenuto. Un saluto :)

3

Utilizzare questa:

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