angular-ui / ui-router $ stateChangeError永远不会为不存在的状态触发

时间:2016-08-21 22:24:50

标签: javascript angularjs angular-ui-router

我的问题是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

对我可能做错的任何建议?

2 个答案:

答案 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;触发无法找到该有效状态的控制器,模板和资源的有效状态请求。但是对于一个拼写错误的国家而言,它不会被解雇,而根本就不存在。