2016-07-15 7 views
5

Ich möchte Parameter an Service-Funktion senden.Wie Parameter in AngularJS mit Versprechen übergeben werden

getQuestions: function (statecode): questionResource.js

state in $ Bereich aus der Reaktion von dtoResource.rc1Step1DTO eingestellt ist()

angular 
    .module('autoQuote') 
    //Do initalization on page load 
    .run(['$log', '$rootScope', '$state', 'dtoResource', 'questionResource', function($log, $rootScope, $state, dtoResource, questionResource) { 
     $log.info('Post DTO on page load.'); 
     dtoResource.rc1Step1DTO() 
      .then(questionResource.getQuestions) 
      .then(function(questions) { 
       $rootScope.questions = questions; 
       console.log('Obtained questions. Assigned to rootscope'); 
      }) 
      .then(function() { 
       console.log('This should be printed after the above methods are done  executing'); 
       console.log($rootScope); 
      }); 

    }]) 

Wie Zustand Code zu übergeben die andere Funktion. seine Position im Rahmen ist

$scope.postAutoQuoteObj.SessionInfo.StateCode 

Unten ist die Plunker für Code http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

+0

Ihre 'run()' Funktion ausgeführt wird, bevor der Controller noch vorhanden ist, und das '$ scope', die Sie reden nicht von innerhalb der' run() 'Funktion. Ich denke, Sie müssen die Logistik von that_ zuerst lösen. – JLRishe

+0

Funktionen, die ich in .run geschrieben habe Ich möchte nach dom geladen ausführen, aber diese Methoden sind unabhängig und sollten in synchroner Reihenfolge sein. Kannst du mir bitte vorschlagen, was ich ändern sollte? bevor Sie am Parameter Pass-Problem arbeiten. –

Antwort

0

Ihr Modul autoQuote.run() wird nur einmal während Ihrer Anwendungen Laden aufgerufen werden. Erwarten Sie also nicht, dass es erneut ausgeführt wird.

Sie sind in der Nähe der richtigen Antwort. Sie müssen nur eine Reorganisation vornehmen. Ein Tipp, den ich Ihnen anbieten würde, ist, dass Sie sich später Gedanken darüber machen, eine Richtlinie zu erstellen, zuerst die Controller, dann die Routen, die zuerst funktionieren. Sie haben einen ausgezeichneten Rahmen zum Starten erstellt. Sie verwenden Ui-Router. Dies bedeutet, dass Sie dem UI-Router mitteilen können, welcher Controller ausgeführt werden soll, wenn ein Status angefordert wird. so ist der Lebenszyklus für Ihre Anwendung wie folgt

module.run // irgendeinen Code hier zuerst. nur beim ersten Laden module.config // in Ihrem Fall app.config, das Ihre Zustände erstellt.

dann je nachdem, welchen Status Sie basierend auf der URL anzeigen; der Controller für diesen Zustand (oder View) wird ausgeführt

Also, wenn Sie eine weitere State-Konfiguration für/hinzufügen, können Sie diesen Zustand an Ihre AutoQuoteCtrl binden.

Darüber hinaus gibt es eine Reihe anderer Probleme, z. B. den Versuch, ng-model und value in einem Eingabeelement zu verwenden. das ist nicht richtig.

Sie implementieren nicht Ihre ui-Ansichten. Dies bedeutet, dass Ihre Controller niemals ausgeführt werden. technisch gesehen wäre es Ihr Fall, dass autoQuoteCtrl ausgeführt wird, aber nur, weil Sie es mit ng-controller auf die Seite gezwungen haben, was ui-router eigentlich vermeiden soll.

was ich denke, warum Sie am Ende Ihren Code in .run() platziert haben. Dies war der einzige Ort, an dem Ihre Anwendung den Code beim Laden der Seite "ausführen" würde, was falsch ist. Sie wurde nur ausgeführt, weil Ihre App geladen wurde. Tut mir leid, wenn ich überflüssig bin. Aber es ist ein wichtiger Punkt.

Sie versuchen auch, auf Ihre json-Daten zuzugreifen, indem Sie den Statuscode an Ihre Ressource übergeben. So funktioniert $ ressource nicht. Sie übergeben den Namen der Ressource und es wird alles an dieser Ressource zurückgegeben. Dann filtern Sie den Code, nachdem das Versprechen zurückgegeben wurde. Sie haben nur eine Ressource. das ist "CA.json", also sollten Sie in der Lage sein, mit nur einer Zeile in Ihrem Ressourcendienst zu entkommen und nur einen Ressourcendienst zu benötigen. Sie benötigen zusätzliche Nicht-Ressourcen-Dienste, die das Filtern der richtigen Daten aus dem JSON herausheben können. Dies ist der Grund, warum eine App verschiedene Ressourcen anruft, so dass jeder das benötigte Modell zurückgibt, nicht eine einzige monolithische Ressource.

und Sie sollten jemals jemals nie document.getElementById() Sie Winkel verwenden verwendet werden, so dass Sie

schließlich nicht direkt mit dem Dom in Wechselwirkung treten, ist hier eine viel viel überarbeitet plunkr Sie in die richtige Richtung, um zu helfen.

http://plnkr.co/edit/dUJm01uu7RnhltC2pLLb?p=preview

Verwandte Themen