2016-07-15 182 views
5

Desidero inviare il parametro alla funzione di servizio.Come passare il parametro per funzionare in AngularJS con le promesse

getQuestions: funzione (stateCode): questionResource.js

stateCode occupa $ portata dalla risposta di dtoResource.rc1Step1DTO()

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); 
      }); 

    }]) 

Come passare codice di stato di l'altra funzione. sua posizione nel campo di applicazione è

$scope.postAutoQuoteObj.SessionInfo.StateCode 

seguito è il codice plunker http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

+0

vostro 'run() funzione' viene eseguito prima il controller esiste anche, e il '$ scope' che si sta parlando non è accessibile dall'interno della funzione' run() '. Penso che sia necessario risolvere la logistica di _that_ prima. – JLRishe

+0

funzioni che ho scritto in .run che voglio eseguire dopo dom caricato, ma questi metodi sono indipendenti e dovrebbero essere in ordine sincrono. Potete per favore suggerire quali cambiamenti dovrei fare. prima di lavorare sul problema del pass di parametri. –

risposta

0

modulo autoQuote.run() sarà chiamato solo una volta durante il caricamento delle applicazioni. Quindi non aspettarti di averlo di nuovo eseguito.

siete vicini alla risposta giusta. hai solo bisogno di fare qualche riorganizzazione. Un suggerimento che vorrei offrire è preoccuparsi di creare una direttiva in un secondo momento, in primo luogo ottenere i controller, le rotte funzionanti per prime. Hai creato una struttura eccellente per iniziare. stai usando ui-router. significa che è possibile indicare al router che controller eseguire quando viene richiesto uno stato. quindi il ciclo di vita della tua applicazione è il seguente

module.run // qualsiasi codice qui dentro prima. solo su carico iniziale module.config // nel tuo caso app.config che crea i tuoi stati.

quindi a seconda di quale stato si sta visualizzando in base all'URL; il controllore per quello stato (o vista) verrà eseguito

quindi, se si aggiunge un'altra configurazione di stato per/è possibile associare tale stato al proprio AutoQuoteCtrl.

Inoltre, ci sono un certo numero di altri problemi, come il tentativo di usare il modello-ng e il valore in un elemento di input. questo non è corretto

non stai implementando le tue visualizzazioni ui. questo significherà che i tuoi controller non verranno mai eseguiti. tecnicamente, il tuo caso autoQuoteCtrl verrebbe eseguito, ma solo perché lo hai forzato sulla pagina usando ng-controller, che è ciò che ui-router è progettato per evitare.

che penso sia il motivo per cui hai finito per inserire il tuo codice in .run(). Questo è stato l'unico posto in cui hai trovato che il tuo applicaton "eseguiva" il codice sul caricamento della pagina che è falso, era in esecuzione solo perché la tua app è stata caricata. Scusate se sono ridondante. Ma è un punto importante.

Inoltre, si sta tentando di accedere ai dati JSON passando il codice di stato alla risorsa. non è così che funzionano le risorse $. tu passi il nome della risorsa e restituirà tutto a quella risorsa. quindi si filtra il codice dopo che la promessa viene restituita. hai solo una risorsa. questo è "CA.json", quindi dovresti essere in grado di cavartela con una sola riga nel tuo servizio di risorse e hai solo bisogno di un servizio di risorse. Avrete bisogno di ulteriori servizi non di risorse che possono fare il sollevamento di filtrare i dati corretti dal JSON. tipicamente questo è il motivo per cui un'app chiama a risorse diverse, in modo che ciascuna restituisca il modello necessario, non una singola risorsa monolitica.

e non si dovrebbe mai mai mai utilizzare document.getElementById() si utilizza angolare, in modo da non interagire con il DOM direttamente

infine, ecco un plunkr molto molto rivisto per contribuire a guidarli nella giusta direzione.

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