【发布时间】:2014-10-21 13:36:29
【问题描述】:
ui-router 0.2.11 / AngularJS 1.3.0
我很难理解为什么我在 BarCtrl 中的 $stateChangeSuccess 事件处理程序没有在 #/foo/bar 上触发。它在 #/bar 上触发。
#/foo/bar -> Console: foo
#/bar -> Console: bar
我想要实现的是在 #/foo/bar 上首先触发 FooCtrl 的处理程序,然后触发 BarCtrl 的:
foo
bar
我的代码:
var app = angular.module('foobar', ['restangular', 'ui.bootstrap', 'ui.router'])
app.config(function($stateProvider, $urlRouterProvider) {
$stateProvider.state('root', {
url: "/",
template: '<div ui-view></div>'
})
.state('foo', {
abstract: true,
url: "/foo",
controller: 'FooCtrl',
})
.state('foo.bar', {
url: "/bar",
controller: 'BarCtrl',
})
.state('bar', {
url: "/bar",
controller: 'BarCtrl',
});
})
app.controller('FooCtrl', function($scope) {
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
console.log("foo");
});
});
app.controller('BarCtrl', function($scope) {
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
console.log('bar')
});
});
【问题讨论】:
-
确保
BarCtrl在#/foo/bar时被调用 -
@Alexei:你能解释一下吗?我在想 foo.bar 链中的所有控制器都会被调用,文档说:“当一个状态是“活跃的”时——它的所有祖先状态也都是隐式活跃的。'
-
你能准备一把小提琴吗?我刚刚在本地检查了一下,一切都按预期工作。
标签: angularjs angular-ui-router