私は数日間Webを精査しました。あなたがリダイレクト($ state.goなど)を解決でリダイレクトすると、移行が取り消され、すべての解決が再び実行されることを理解しています。UIルータの解決 - 親解決を再実行せずに子解決にリダイレクト
しかし、何らかの子供の状態にならないようにする必要がある場合はどうすればよいですか。そして、私は解決の中で、私が大して必要としないデータをフェッチします。
これは人にとって珍しいシナリオだとは思いません。誰かがアイデアを持っているなら、私はこのplnkrが働くのを手伝ってください!
http://plnkr.co/edit/gFDcRqoPXKbD1ZZwylO9?p=preview
var app = angular.module('plunker', ['ui.router']);
app.config(['$stateProvider', function($stateProvider){
$stateProvider
.state('posts', {
url: "/posts",
templateUrl: "posts-index.html",
controller: "PostsIndexController",
resolve: {
posts: function(Post) {
console.log('Hi');
return Post.all()
}
},
onEnter: function($state, posts) {
if (posts.length > 1 && confirm("Redirect to first post?")) {
console.log('Howdy')
// $state.go('posts.show', { postId: 3 });
}
}
})
.state('posts.empty', {
templateUrl: "posts-show.html",
resolve: {
saySomething: function($state) {
console.log('Yo')
}
}
})
.state('posts.show', {
url: "/:postId",
templateUrl: "posts-show.html",
controller: "PostsShowController",
resolve: {
post: function($stateParams, $q, Post) {
console.log($stateParams);
return Post.find($stateParams.postId)
}
},
onEnter: function($stateParams, $state) {
if ($stateParams.postId === '1') {
console.log('Now')
return $state.go("posts.empty")
}
}
})
}]);
app.controller("PostsIndexController", function($scope, posts){
$scope.posts = posts
})
app.controller("PostsShowController", function($scope, post){
$scope.post = post
})
app.run(function($rootScope, $state) {
$rootScope.$on('$stateChangeError', function(evt, to, toParams, from, fromParams, error) {
console.log(to, toParams)
console.log(from, fromParams)
if (error.redirectTo) {
$state.transitionTo(error.redirectTo, error.redirectToParams);
} else {
// $state.go('error', {status: error.status})
}
})
})
app.factory('Post', function(){
return {
all: function() {
return [
{ id: 1, title: "Post 1" },
{ id: 2, title: "Post 2" },
{ id: 3, title: "Post 3" }
]
},
find: function(id) {
return _(this.all()).findWhere({id: +id})
}
}
})
私は同じ問題を抱えています。$ state.go呼び出しで、親に 'abstract'を追加し、' notify'、 'inherit'、' reload'のすべての組み合わせを追加しようとしました。親の解決が正常に終了したかどうかは気にしないようです。すべての子が解決するようにする必要があります。そうしないと、親状態は決して「アクティブ」とはみなされません。 – Madd0g