2016-10-20 85 views
1

我正在使用身體標記中的控制器來實例化通過應用程序使用的一些變量,即將在應用程序中使用的語言(基於url參數)。

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

在init()函數,我嘗試使用$ stateParams讀取URL中的「局域網」參數,但它仍然是不確定的:

/*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" 
} 

很奇怪,因爲我可以看到它打印$ stateParams與.lan屬性我無法訪問它。

我也配置了$ stateProvider這樣的:

$stateProvider 
    .state('root', { 
     url: '/{lan:(?:pt|en)}', 
     abstract: true, 
     template: '<div ui-view=""></div>', 
     params: { lan: { value: 'pt' } }, 
    }) 
    .state('home', { 
     parent: 'root', 
     url: '/', 
     templateUrl: '/front/main/views/front-main.client.view.html' 
    }); 

什麼是做到這一點的正確方法?

回答

3

的辦法就是從這裏

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

刪除NG控制器,並將其移到狀態

.state('root', { 
    url: '/{lan:(?:pt|en)}', 
    abstract: true, 
    template: '<div ui-view=""></div>', 
    params: { lan: { value: 'pt' } }, 
    controller:'AppCtrl' 
}) 

一般..國家views及其controllersUI-路由器世界......而不是AngularJS ng-controller

相關問題