簡體   English   中英

AngularJS-使用UI-Router從父控制器訪問$ statParams

[英]AngularJS - Access $statParams from a parent controller with UI-Router

我有一個相當復雜的原型應用程序,被要求放在一起……現在在我的應用程序中,我使用UI-Router定義了一些路由/狀態,這是我的app.js文件中的一些代碼,您可以看到一個父對象和子路線/狀態:

.state('myapp.loggedInHome.contacts.default', {
        url: '/:profileId', // this could be myurl.com/home/contacts/31333194
        template: '<ui-view/>',
        publicAccess: false
    })
// nested state for contacts profile...
.state('myapp.loggedInHome.contacts.default.news', {
    url: '/news',  // this could be myurl.com/home/contacts/31333194/news
    templateUrl: '/prototype/app/people/views/news.html',
    publicAccess: false,
    controller: 'VisitorsNewsCtrl'
})

現在,在VisitorsNewsCtr l控制器中,我想訪問父根目錄中定義的:profileId ...但是,當我嘗試使用$stateParams服務訪問此$stateParams我卻無法undefined 我的控制器在做什么錯?

.controller('VisitorsCtrl', ['$scope', '$stateParams', 
    function ($scope, $stateParams) {

      console.log($stateParams.profileId); // this is undefined as 
                                           // $stateParams is an empty object

我正像這樣重定向到這種狀態...

$state.go('myapp.loggedInHome.contacts.default.news', { profileId: 123456 } );

但是profileId的值是不確定的? 但是該值顯示在URL中!

您需要像下面這樣在狀態定義中向網址添加潛在的參數: url: '/news/:profileId'

如果您使用$state.go('myapp.loggedInHome.contacts.default.news', {profileId: 1234}) ,則應該可以訪問$stateParams.profileId

定義示例:

$stateProvider
    .state('contacts.detail', {
        url: "/contacts/:contactId",
        templateUrl: 'contacts.detail.html',
        controller: function ($stateParams) {
            // If we got here from a url of /contacts/42
            expect($stateParams).toBe({contactId: "42"});
        }
    })

我設法通過使用$state對象獲取值!

像這樣

.controller('VisitorsCtrl', ['$scope', '$state', function ($scope, $state) {

console.log($state.params.profileId);

老實說(盡管有其他兩個答案),問題是,這個定義:

.controller('VisitorsCtrl', ['$scope', '$stateParams', 
  function ($scope, $stateParams) {

    console.log($stateParams.profileId); 
    ...

關於控制器'VisitorsCtrl' 當狀態顯示'VisitorsNewsCtrl'

.state('myapp.loggedInHome.contacts.default.news', {
    url: '/news',  // this could be myurl.com/home/contacts/31333194/news
    templateUrl: '/prototype/app/people/views/news.html',
    publicAccess: false,
    controller: 'VisitorsNewsCtrl'
})

因此,如果控制器可以匹配,我可以肯定$ stateParams的語法可以正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM