我有一个离子1.0项目。
以下代码为控制器设置过滤器categoryTitle
。
app.js
.state('tab.events', {
url: '/events/:categoryTitle',
views: {
'tab-events': {
templateUrl: 'templates/tab-events.html',
controller: 'EventsCtrl'
}
}
})
controllers.js
.controller('EventsCtrl', function ($scope, $stateParams, EventService) {
var category = $stateParams.categoryTitle;
// var period = $stateParams.period;
var events = EventService.query({ category: category, period: period });
events.$promise.then(function (response) {
$scope.events = response;
$scope.category = category;
// $scope.period = period;
});
})
因此网址http://localhost:8100/#/tab/events/Music会过滤页面以仅显示音乐类别。现在我需要添加另一个过滤器period
。所以我将app.js
更改为以下内容并取消注释controller.js
.state('tab.events', {
url: '/events/:categoryTitle?p=:period', // Added "?p=:period"
views: {
'tab-events': {
templateUrl: 'templates/tab-events.html',
controller: 'EventsCtrl'
}
}
})
但是,http://localhost:8100/#/tab/events/Music?p=weekend始终在控制器行undefined
中获得var period = $stateParams.period;
?
答案 0 :(得分:1)
我相信你正在监视错误的参数。在您的示例中,第二个参数(您在查询字符串中设置的参数将是p
而不是period
。
查看示例here,说明$stateParams
服务如何运作
示例:
// you navigated your browser to:
'/users/123/details/default/0?from=there&to=here'
// Your $stateParams object would be
{ id:'123', type:'default', repeat:'0', from:'there', to:'here' }
从示例中可以看出,$stateParams
对象将返回一个对象,该对象包含定义为:parameter
的参数或定义为查询字符串参数的参数