我的问题是ui-router $stateChangeError
不是由“404”invaild状态触发的。
我确信我的$stateChangeSucess
正确开火:
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams)
当我故意制造无效状态时:
<ui-view>
<a ui-sref="foo" style="cursor: pointer;">Foo is not a state</a>
</ui-view>
$stateChangeError
事件未被触发,我知道我有正确的签名
angular
.module('blocks.router')
.run(['$rootScope', function($rootScope) {
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
console.log('$stateChangeError fired!');
});
}]);
我在添加工作$stateChangeError
的同时将我的功能添加到$stateChangeSuccess
。
对我可能做错的任何建议?
答案 0 :(得分:3)
对于这种情况,Angular-ui-router有$stateNotFound
答案 1 :(得分:2)
所以&#39; $ stateChangeError&#39;不会因无效/拼写错误的状态而触发。例如,如果您声明是&#34;登录&#34;并将状态更改为&#34; loginfoo&#34;在控制器中,&#39; $ stateChangeError&#39;不会开枪。
现在,如果您的templateUrl位置为州&#34;登录&#34;是&#34; app / templates / login.html&#34;并且您错误地命名了模板&#34; app / templates / loginfoo.html&#34; &#39; $ stateChangeError&#39;当你去&#34;登录&#34;状态。
所以&#39; $ stateChangeError&#39;触发无法找到该有效状态的控制器,模板和资源的有效状态请求。但是对于一个拼写错误的国家而言,它不会被解雇,而根本就不存在。