I'm using UI-Router to build an application. I need to have multiple views on one page so I'm using abstract states. I tried to pass the parameter "isEmbedded" to the owner
view, but it's unfortunately not working. I'm wondering if its because I'm passing it to a child view. When I console.log($stateParams)
in ownerCtrl
, it does not show the isEmbedded
parameter. Any idea why?
.state('dog', {
url: "",
parent: "dogAbstract",
views: {
"owner": {
templateUrl: 'client/people/views/owner.ng.html',
controller: 'ownerCtrl',
params:{
isEmbedded:true
}
}
}
})
P.S. I got the idea to use params
from this question:
Angular ui router passing data between states without URL
Answer
While $stateParams belongs to state, we can use special resolve for a view:
...
views: {
"owner": {
templateUrl: 'client/people/views/owner.ng.html',
controller: 'ownerCtrl',
resolve:{
isEmbedded: function() { return true},
}
}
}
I created an example here with these two child states
.state('parent.child', {
url: "/child",
templateUrl: 'tpl.html',
controller: 'ChildCtrl',
resolve: {
isEmbedded: function() { return false},
}
})
.state('parent.child2', {
url: "/child2",
templateUrl: 'tpl.html',
controller: 'ChildCtrl',
resolve: {
isEmbedded: function() { return true},
}
})
And controller can consume it:
.controller('ChildCtrl', ['$scope', 'isEmbedded',
function ($scope, isEmbedded) {
console.log(isEmbedded)
}
])
Check it here
No comments:
Post a Comment