2016-07-31 6 views
0

Ich bin neu in AngularJS, und ich versuche, es zu verwenden, um eine http Get-Anfrage an einen Remote-Server zu senden, ohne den vorhandenen Ansichtscode zu beeinträchtigen. Ich habe einen Weg gefunden, um eine Funktion sofort nach HTML bereit zu stellen, using stand alone init(). Allerdings, wenn ich es Code wie,Wie wird AngularJS api in einer eigenständigen Funktion verwendet?

var init= function($http, $location) { 
    //using $location to fetch query string 

    if ($location.search().hasOwnProperty('a') && $location.search().hasOwnProperty('b')){ 
    var a= $location.search().a; 
    var b= $location.search().b; 

    var sendurl = 'http://someurl'+a+b ; 

    var req = { 
     method:'GET', 
     url: sendurl, 
     headers:{ 
     'Content-Type': 'text/html' 
     }, 
     data: {token: ''} 
    }; 

    $http(req) 
     .success(function(){ 
     alert('success!'); 
     }) 
     .error(function(){ 
     alert("ERROR"); 
     }); 

    } 
}; 
init() ; 

in der Konsole ist der Fehler TypeError: $location is undefined. Ich weiß, es muss sein, dass ich nicht weiß, wie man AngularJS-Code in einer Standalone-Funktion verwendet, also würde ich gerne fragen, wie man eine solche Funktion schreibt.

Antwort

1

versuchen, diese Funktion im Service wie folgt zu schreiben.

var myApp = angular.module('myApp', []); 

myApp.factory('SomeService', function ($http, $location) { 
    return { 
    init: init 
    }; 

    function init() { 
    if ($location.search().hasOwnProperty('a') && $location.search().hasOwnProperty('b')){ 
     var a= $location.search().a; 
     var b= $location.search().b; 

     var sendurl = 'http://someurl'+a+b ; 

     var req = { 
     method:'GET', 
     url: sendurl, 
     headers:{ 
      'Content-Type': 'text/html' 
     }, 
     data: {token: ''} 
     }; 

     $http(req) 
     .success(function(){ 
      alert('success!'); 
     }) 
     .error(function(){ 
      alert("ERROR"); 
     }); 
    } 
    } 
}); 

und nach Aufruf init-Funktion an die Steuerung

myApp.controller('MyController', function (SomeService){ 
    SomeService.init(); 
    }); 
+0

Wie kann ich diese init run() direkt nach der Ansicht geladen? –

+0

@ tomriddle_1234 hängt davon ab, wie Ihre Ansicht geladen ist. Ist es Ansicht, die durch Routen-Mapping geladen wird, ist es Ansicht binden an ['ngIf'] (https://docs.angularjs.org/api/ng/directive/ngIf) Konstrukt, ist es in Richtlinie oder vielleicht View verwendet ['ngInclude'] (https://docs.angularjs.org/api/ng/directive/ngInclude). – Eugene

+0

Binden Controller an die Ansicht und wenn es lädt Controller wird Init-Funktion ausführen. Sehen Sie sich diese Dokumentation an https://docs.angularjs.org/guide/controller#associating-controllers-with-angular-scope-objects – donquixote

Verwandte Themen