Согласно documentation, вы можете использовать пользовательские данные и слушать stateChange
s, чтобы предотвратить доступ к состоянию, основанному на некоторых условиях. Это работает без проблем, но мой вариант использования - когда я вхожу в вложенное состояние, я хочу, чтобы все правила состояний потомков были соблюдены.ui-router вложенное состояние и промежуточный защитник
Другими словами, если я начинаю с green
состояния, и я хочу в конечном итоге находиться в blue
состоянии, я хочу, чтобы правило login
получило оценку. В настоящее время применяется только правило color
. Есть какой-либо способ сделать это?
Я понимаю, что данные перезаписываются в дочернем состоянии, и именно по этой причине я вижу только журнал color
. Но каков способ расширения data
и не перезаписывать его?
вот код:
var example = angular.module("example", ['ui.router']);
example.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state("parent", {
url: "/parent",
templateUrl: "templates/parent.html",
data: {
rule: function() {
console.log("login rule checked");
return true;
}
}
})
.state("parent.child", {
url: "/child",
templateUrl: "templates/child.html",
data: {
rule: function() {
console.log("color rule checked");
return true;
}
}
});
});
example.run(function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (!toState.data || !angular.isFunction(toState.data.rule)) return;
var result = toState.data.rule();
if (result) {
event.preventDefault();
$state.go(toState, result.params, {notify: false});
} else {
event.preventDefault();
}
})
});
По-прежнему не регистрируется правило входа в систему. Я что-то упускаю? – norbertpy
Упс. Я не очень внимательно прочитал ваш вопрос. Дай мне попробовать снова... –