2015-03-24 14 views
18

Używam $stateProvider do konfiguracji mojej trasy. Chciałem skorzystać z niestandardowych danych, które przekazują, aby przekazać pewne niestandardowe dane z jednej częściowej strony na drugą (na ng-click).Jak przekazać niestandardowe dane do stanu z widoku w ui-routerze?

Jest to najlepszy mam tak daleko:

Dołączanie niestandardowych danych do państwa Przedmioty

Możesz dołączyć dane niestandardowe do obiektu państwowej (zalecamy użycie własności danych w celu uniknięcia konfliktów).

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

Z powyższego przykładu stwierdza można uzyskać dostęp do danych tak:

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

Source

Przyjmijmy, mam inny stan zwany klientów z własnym szablonem i kontrolera. Jak mogę zmienić wartość obiektu danych stanu kontaktu w kontrolerze/widoku klientów? tj: Chcę zmienić z tego:

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

do tego:

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

Każda wskazówka lub próbki zostaną docenione!

Zmienione - mam to działa samemu i oto jak :. na kontrolerze (na przykład: customerCtrl), można uzyskać stan kontaktu według nazwy i wprowadzić żądaną zmianę, na przykład aktualizując wartość właściwości obiektu danych niestandardowych, jak poniżej: // pobierz stan według nazwy i zmień wartość niestandardowej własności danych

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

Mam nadzieję, że to pomoże komuś.

+1

Należy dodać roztwór znalazłeś jako odpowiedź i przyjmuję je. Jest to całkowicie w porządku i zachęcane, aby inni mogli czerpać korzyści z tego, czego się nauczyliście. – GregL

+0

Dzięki @GregL, właśnie to opublikowałem i zaakceptowałem jako odpowiedź, pozostawiam również aktualne pytanie. – user3818435

Odpowiedz

23

Mam to działa samemu i oto jak. Na kontrolerze (powiedzmy: customerCtrl) można uzyskać stan kontaktu po nazwie (https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statename i poszukać $ state.get ([stateName]) )
Po uzyskaniu stanu można wprowadzić żądaną zmianę, np. jako aktualizację wartości właściwości obiektu danych użytkownika w następujący sposób:

//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'); 

Mam nadzieję, że to komuś pomoże.

6

Jeśli próbujesz odczytać dane niestandardowe dla obecnego stanu można łatwo odczytać go jako $state.current.data.customData1 = 100;