以编程方式添加路径后,当访问任何路径时,按下后退按钮时,角度会引发错误

时间:2016-07-16 14:27:03

标签: javascript html angularjs built.io

我的问题是,在添加以下代码后,我的后退键会向我的网络应用添加动态路由,但是我的后退键会抛出一个我无法诊断的错误。

这是一个简单的提供者方法,我偶然发现了这个功能:

myApp.provider('$dashboardState', function($stateProvider){
    this.$get = function($state){
        return {
            addState: function(title) {
                $stateProvider.state(title, {
                    url: '/' + title,
                    templateUrl: "templates/" + title + '.html'
                });
            }
        }
    }
})

然后我可以在我的任何控制器中添加路由到我的ui-router,如下所示:

//variable $urlName is fetched previously and is just a string

$url_name = $urlName;
$dashboardState.addState($url_name);

然而,当我这样做时,我会通过点击:

重定向到我动态制作的路线
<a href="#/" + $urlName + "\">

在我的HTML中,它完美无瑕,除非我在浏览器中单击后退键,控制台会抛出此错误:

[Error] Potentially unhandled rejection [1] 
registerState@http://epicbiz.shotsevolved.com/js/angular-ui-router.js:2361:53
state@http://epicbiz.shotsevolved.com/js/angular-ui-router.js:2871:18
addState@http://epicbiz.shotsevolved.com/js/app.js:22:37
http://epicbiz.shotsevolved.com/js/app.js:163:34
j@http://epicbiz.shotsevolved.com/js/built.min.js:13:3777
O@http://epicbiz.shotsevolved.com/js/built.min.js:13:3464
when@http://epicbiz.shotsevolved.com/js/built.min.js:13:6577
run@http://epicbiz.shotsevolved.com/js/built.min.js:13:5616
n@http://epicbiz.shotsevolved.com/js/built.min.js:11:25298
_drain@http://epicbiz.shotsevolved.com/js/built.min.js:11:25476
drain@http://epicbiz.shotsevolved.com/js/built.min.js:11:25250
r@http://epicbiz.shotsevolved.com/js/built.min.js:6:13467
    (anonymous function) (built.min.js:13:707)
    r (built.min.js:13:328)
    c (built.min.js:13:592)

我对角度很新,但任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

在第2361行检查angular-ui-router的来源时(这是您的错误报告所说的位置):

if (states.hasOwnProperty(name)) throw new Error("State '" + name + "' is already defined");

这意味着你不能两次注册同名的州。

但是,当你回到之前的状态时,可能会再次执行你的addState($ url_name)。这将导致重复的州名称错误。

顺便说一句,我认为动态设置状态并不是一个好主意。如果你坚持这样做,也许在添加它之前检查状态名是否已经存在。