2015-03-24 7 views
18

Sto usando $stateProvider per la configurazione del mio percorso. Volevo sfruttare i dati personalizzati forniti per passare alcuni dati personalizzati da una pagina parziale all'altra (su ng-click).come posso passare dati personalizzati a uno stato da una vista in ui-router?

Questa è la migliore che ho ottenuto finora:

Fissare dati personalizzato a State Oggetti

È possibile allegare i dati personalizzati per l'oggetto di stato (si consiglia di utilizzare una proprietà di dati per evitare conflitti).

// Example shows an object-based state and a string-based state 
var contacts = { 
    name: 'contacts', 
    templateUrl: 'contacts.html', 
    data: { 
     customData1: 5, 
     customData2: "blue" 
    } 
} 
$stateProvider 
    .state(contacts) 
    .state('contacts.list', { 
     templateUrl: 'contacts.list.html', 
     data: { 
      customData1: 44, 
      customData2: "red" 
     } 
    }) 

Con l'esempio di cui sopra afferma è possibile accedere ai dati in questo modo:

function Ctrl($state){ 
    console.log($state.current.data.customData1) // outputs 5; 
    console.log($state.current.data.customData2) // outputs "blue"; 
} 

Source

Si supponga che ho un altro stato chiamato i clienti con il proprio modello e controller. Come posso modificare il valore dell'oggetto dati stato dei contatti all'interno del controller/vista clienti? cioè: voglio cambiare da questo:

data: { 
      customData1: 44, 
      customData2: "red" 
     } 

a questo:

data: { 
      customData1: 100, 
      customData2: "green" 
     } 

Qualsiasi puntatore o il campione sarà apprezzato!

Revisionato - ho capito che funziona da solo ed ecco come: su un controller (ad esempio: customerCtrl), è possibile ottenere lo stato del contatto per nome e apportare la modifica desiderata, ad esempio l'aggiornamento del valore della proprietà dell'oggetto dati personalizzato come segue: // ottenere lo stato per nome e modificare il valore di dati personalizzati proprietà

$state.get('contacts').data.customData1= 100; 
$state.go('contacts');// then you can make a go to that state. 

Spero che questo possa aiutare qualcuno.

+1

Si dovrebbe aggiungere la soluzione che hai trovato come una risposta e lo accetto. Questo è perfettamente valido e incoraggiato, in modo che altre persone possano beneficiare di ciò che hai imparato. – GregL

+0

Grazie a @GregL, l'ho appena postato e l'ho accettato come risposta, lascerò anche la domanda aggiornata così com'è. – user3818435

risposta

23

L'ho ottenuto lavorando da solo ed ecco come. Su un controller (ad esempio: customerCtrl), è possibile ottenere lo stato del contatto per nome (https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statename e cercare $ state.get ([nome stato]) )
Una volta ottenuto lo stato, è possibile apportare la modifica desiderata, ad esempio come aggiornare il valore della proprietà dell'oggetto dati personalizzato come segue:

//get the state by name and change the value of custom data property 
$state.get('contacts').data.customData1= 100; 
    // then you can go to that state. 
$state.go('contacts'); 

Spero che questo aiuti qualcuno.

6

Se si sta tentando di leggere i dati personalizzati per lo stato attuale si può facilmente leggere come $state.current.data.customData1 = 100;