2015-03-24 5 views
18

Ich verwende $stateProvider für meine Routenkonfiguration. Ich wollte die von ihnen bereitgestellten benutzerdefinierten Daten nutzen, um einige benutzerdefinierte Daten von einer Teilseite an die andere zu übergeben (unter ng-click).Wie kann ich benutzerdefinierte Daten von einer Ansicht in UI-Router an einen Zustand übergeben?

Dies ist das beste, das ich so weit gekommen:

Bringen Sie Custom Data State

Sie Objekte können benutzerdefinierte Daten an das Statusobjekt anhängen (wir empfehlen eine Dateneigenschaft mit Konflikten zu vermeiden).

// 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" 
     } 
    }) 

Mit dem obigen Beispiel heißt Sie die Daten wie folgt zugreifen können:

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

Source

Angenommen, ich habe ein anderer Staat Kunden mit einer eigenen Vorlage und Controller aufgerufen. Wie kann ich den Wert des Zustandsdatenobjekts von Kontakten im Kunden-Controller/View ändern? das heißt: Ich möchte von diesem ändern:

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

dazu:

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

Alle Zeiger oder Probe wird geschätzt!

Überarbeitet - ich habe es funktioniert von mir selbst und hier ist wie :. Auf einem Controller (sagen wir: customerCtrl) können Sie den Status des Kontakts nach Namen abrufen und die gewünschte Änderung vornehmen, z. B. den Eigenschaftswert des benutzerdefinierten Datenobjekts wie folgt aktualisieren: // den Status anhand des Namens abrufen und den Wert ändern von benutzerdefinierten Daten Eigenschaft

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

Ich hoffe, das wird jemandem helfen.

+1

Sie sollten die Lösung, die Sie als Antwort gefunden hinzufügen und es akzeptieren. Das ist vollkommen in Ordnung und ermutigt, damit andere Menschen von dem profitieren können, was Sie gelernt haben. – GregL

+0

Danke @GregL, ich habe es gerade gepostet und akzeptiere es als Antwort, ich werde die aktualisierte Frage auch so lassen. – user3818435

Antwort

23

Ich habe es selbst funktioniert und hier ist wie. Auf einem Controller (sagen wir: customerCtrl) können Sie den Status des Kontakts über den Namen (https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statename und suchen Sie nach $ state.get ([statusName]) ) Sobald Sie den Status erhalten, können Sie die gewünschte Änderung vornehmen wie folgt:

Ich hoffe, dass dies jemand helfen wird.

6

Wenn Sie versuchen, benutzerdefinierte Daten für den aktuellen Status zu lesen lesen Sie es einfach als $state.current.data.customData1 = 100;