AngularJS $state.go() 不发出 $stateChangeSuccess?
AngularJS $state.go() do not emit $stateChangeSuccess?
我有控制器 A
和 B
位于不同的州。
当我调用 $state.go('state_b');
时,Angular 会将状态更改为 state_b
并加载控制器 B
。一切如预期。出乎意料的是,我的 B
控制器中没有 $stateChangeSuccess
。
为什么我的 B
没有从控制器 A
得到 $state.go
产生的 $stateChangeSuccess
?
B
控制器是否有任何其他方式知道它已显示? (之前激活的状态无关紧要,只是 state/controller B
再次激活)
状态定义:
.state("state_b", {
url: "b/?:id",
templateUrl:"/template/cms/shared/tabs/genericView.html.twig",
reloadOnSearch: false,
moduleName: "Module B",
componentName: "Component B",
parent: "application"
})
.state("state_a", {
url: "a/",
templateUrl: "/template/bundlename/a/index.html.twig",
moduleName: "Module A",
componentName: "Component A",
parent: "application",
controller: "OohAController as a",
resolve: {
b: function(OohBService, OohActiveBService) {
var bId = OohActiveBService.getActiveB();
return OohAService.get({id: bId}).$promise;
}
}
})
我会说,这个概念是有效的。有a working example
并且此事件将被触发
.run(['$rootScope', '$state', function($rootScope, $state) {
$rootScope.$on('$stateChangeSuccess', function(evt, to, params, from) {
console.log("from : " + from.name + ", to:" + to.name);
});
}])
像这样的任何过渡
<a ui-sref="state_b({id:1})">
<a ui-sref="state_b({id:22})">
<a ui-sref="state_a">
我所做的唯一重要更改是 URL
.state("state_b", {
// url: "b/?:id",
url: "/b/?:id",
templateUrl: 'tpl.html',
})
.state("state_a", {
//url: "a/",
url: "/a/",
templateUrl: 'tpl.html',
controller: 'OohAController as a',
})
检查一下here
我有控制器 A
和 B
位于不同的州。
当我调用 $state.go('state_b');
时,Angular 会将状态更改为 state_b
并加载控制器 B
。一切如预期。出乎意料的是,我的 B
控制器中没有 $stateChangeSuccess
。
为什么我的 B
没有从控制器 A
得到 $state.go
产生的 $stateChangeSuccess
?
B
控制器是否有任何其他方式知道它已显示? (之前激活的状态无关紧要,只是 state/controller B
再次激活)
状态定义:
.state("state_b", {
url: "b/?:id",
templateUrl:"/template/cms/shared/tabs/genericView.html.twig",
reloadOnSearch: false,
moduleName: "Module B",
componentName: "Component B",
parent: "application"
})
.state("state_a", {
url: "a/",
templateUrl: "/template/bundlename/a/index.html.twig",
moduleName: "Module A",
componentName: "Component A",
parent: "application",
controller: "OohAController as a",
resolve: {
b: function(OohBService, OohActiveBService) {
var bId = OohActiveBService.getActiveB();
return OohAService.get({id: bId}).$promise;
}
}
})
我会说,这个概念是有效的。有a working example
并且此事件将被触发
.run(['$rootScope', '$state', function($rootScope, $state) {
$rootScope.$on('$stateChangeSuccess', function(evt, to, params, from) {
console.log("from : " + from.name + ", to:" + to.name);
});
}])
像这样的任何过渡
<a ui-sref="state_b({id:1})">
<a ui-sref="state_b({id:22})">
<a ui-sref="state_a">
我所做的唯一重要更改是 URL
.state("state_b", {
// url: "b/?:id",
url: "/b/?:id",
templateUrl: 'tpl.html',
})
.state("state_a", {
//url: "a/",
url: "/a/",
templateUrl: 'tpl.html',
controller: 'OohAController as a',
})
检查一下here