[英]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.