$ state params是空的

时间:2015-06-11 09:29:03

标签: angularjs angular-ui-router

我有一个奇怪的问题,我不明白:

我正在使用ui-router。为什么我在app.run()中的console.log时得到这个结果:

app.run(function ($state) {
    console.log($state);  // output: Object{params:{sitename:"mysite"},current:{...},... other properties}
    console.log($state.params); // output: Object {}

首先我打印出$ state并且它有一个" params"属性是一个具有名为" sitename"的属性的对象。 然后我打印出$ state.params属性,它突然变空了。

任何人都能解释一下吗?

顺便说一句。也试过这个但结果相同

console.log($state["params"]); // output: Object {}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

基本上,console.log($state)正在向$state依赖项打印引用,但不是$ state的实际值。 (Read more here

因此,当您尝试访问$state.params时,它会返回undefined。如果ui-router完成路由($state之后),params实际上会$stateChangeSuccess。在这种情况下,我们将自定义数据附加到状态对象。 (read more about routing and attachment

答案 1 :(得分:0)

我遇到了同样的问题。 我想可能是由于两件事: 1. $ stateParams在通话时不存在 2. $ stateParams与调用者无关。

无论如何,我解决了这个问题如下:

.run(['$rootScope', function ($rootScope) {
        $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
            $rootScope.toParams = toParams;
        });
}])

并在我的对象$ rootScope.toParams:

中使用
    params: {
            page: $rootScope.toParams.page,
    }