为什么我无法在控制器ng-init上访问$ stateParams?

时间:2016-10-20 14:15:02

标签: angularjs angular-ui-router

我在body标签中使用一个控制器来实例化一些通过应用程序使用的变量,即将在应用程序中使用的语言(基于url param)。

self.callback()

在init()函数中,我尝试使用$ stateParams从url中读取“lan”参数,但它仍未定义:

<!--index.html-->
<body ng-controller="AppCtrl" ng-init="init()">
    <section ui-view></section>
</body>

这很奇怪,因为我可以看到它使用.lan属性打印$ stateParams我无法访问它。

我还配置了这样的$ stateProvider:

/*AppCtrl*/
$scope.init = function () {
    console.log($stateParams); // prints Object {lan: "en"}
    console.log($stateParams.lan); // prints undefined
    $timeout(function () {console.log($stateParams.lan);}, 500); //prints "en"
}

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

方法是从这里删除ng-controller

Build.VERSION.SDK_INT

并将其移至州

<body ng-controller="AppCtrl" ng-init="init()">

一般而言......状态&#39; .state('root', { url: '/{lan:(?:pt|en)}', abstract: true, template: '<div ui-view=""></div>', params: { lan: { value: 'pt' } }, controller:'AppCtrl' }) 和他们的views关于 UI-Router 世界...而不是AngularJS ng-controller