Как я могу передавать пользовательские данные в состояние из представления в ui-router?
Я использую $stateProvider
для конфигурации моего маршрута. Я хотел воспользоваться предоставляемыми ими пользовательскими данными для передачи некоторых пользовательских данных с одной частичной страницы на другую (по ng-click
).
Это лучшее, что я получил до сих пор:
Прикрепить пользовательские данные к объектам состояния
Вы можете прикрепить пользовательские данные к объекту состояния (мы рекомендуем использовать свойство данных, чтобы избежать конфликтов).
// 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"
}
})
В приведенном выше примере состояний вы можете получить доступ к данным следующим образом:
function Ctrl($state){
console.log($state.current.data.customData1) // outputs 5;
console.log($state.current.data.customData2) // outputs "blue";
}
Источник
Предположим, у меня есть другое состояние, называемое клиенты, со своим собственным шаблоном и контроллером. Как я могу изменить значение объекта данных состояния контактов в контроллере/представлении клиентов? т.е. я хочу измениться с этого:
data: {
customData1: 44,
customData2: "red"
}
к этому:
data: {
customData1: 100,
customData2: "green"
}
Любой указатель или образец будут оценены!
Пересмотрел - у меня все заработало самостоятельно и вот как: на контроллере (скажем, customerCtrl) вы можете получить состояние контакта по имени и внести необходимые изменения, например, обновить значение свойства пользовательского объекта данных следующим образом:
//get the state by name and change the value of custom data property
$state.get('contacts').data.customData1= 100;
$state.go('contacts'); // then you can make a go to that state.
Ответы
Ответ 1
Я получил его сам, и вот как. На контроллере (скажем: customerCtrl) вы можете получить контактное состояние по имени (https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statename
и искать $state.get([stateName])
)
Как только вы получите состояние, вы можете внести требуемое изменение - например, обновить значение свойства пользовательского объекта данных следующим образом:
//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');
Надеюсь, это поможет кому-то.
Ответ 2
Если вы пытаетесь прочитать пользовательские данные для текущего состояния, вы можете легко прочитать его как $state.current.data.customData1 = 100;