$stateParams 中缺少参数
Parameters missing in $stateParams
下面,我试图在 $state
中发送一个对象并在 $stateParams
中检索它。我认为我这样做是正确的,而且我已经看到很多网站和文章都要求这样做。但是我无法在下一个控制器的 $stateParams
中获取它。
我知道这方面有很多问题,我也经历过很多。我仍然被困住了。
谁能看出我错在哪里?
$scope.setup = function (ev, item, parent) {
console.log("event", ev);
console.log("item", item);
console.log("parent in clusters", parent);
ev.preventDefault();
if(item!==null){
var path = parent.id + '.' + item.code;
path = path.replace(/\s+/g, '').toUpperCase();;
if (!$(ev.target).closest('a').is('[disabled]')) {
$rootScope.child = item;
$rootScope.parent = parent;
console.log("parent", $rootScope.parent);
$state.go('setup', {
targetYear: $scope.targetYear,
path: path
// ,'child': item,
// 'parent': parent
});
}
}
else {
console.log("trade in trade", parent);
console.log("items from scope", $scope.items);
var path = parent.name.trim();
path = path.replace(/\s+/g, '').toUpperCase();
var totalTradesInOverview = $scope.items;
console.log("parent", $rootScope.parent);
$state.go('setup', {
targetYear: $scope.targetYear,
path: path,
params: totalTradesInOverview
});
}
};
我想我应该在另一个控制器中直接在 $stateParams
中获取它。我错了吗?
以下是我的状态声明部分,如果这很重要的话:
module.config(function ($stateProvider) {
$stateProvider.state('setup', {
url: '/setup/:targetYear/:path',
views: {
"main@": {
controller: 'TargetsSetupController as model',
templateUrl: 'app/targets/setup/setup.tpl.html',
// params: params
//I tried even this passing that variable in params like // params: totalTradesInOverview
},
"bar@": {
controller: 'AController',
templateUrl: 'comments.tpl.html'
}
}
}
});
});
只能通过 $stateParams
.
访问状态明确期望的参数
在您的示例中,您的 "setup"
状态声明具有以下 URL:'/setup/:targetYear/:path'
,这意味着它需要 targetYear
和 path
参数。
您正在尝试传递第三个参数 (params
) 但它不可见,因为它不是预期的。
要传递第三个参数,您可以在状态声明中的特殊 params
对象中声明它,并使用一些默认值(注意命名冲突 - 也许这就是您混淆的根源?):
$stateProvider.state('setup', {
url: '/setup/:targetYear/:path',
views: {...},
params: {
params: []
}
});
现在 params
参数应该在 $stateParams 中可见。
如果我是你,我会在上面的状态声明和你的 $state.go
声明中将 params
重命名为 totalTradesInOverview
,以避免混淆。
另请参阅 $stateProvider.state documentation 了解可应用于传递参数的更多选项。
下面,我试图在 $state
中发送一个对象并在 $stateParams
中检索它。我认为我这样做是正确的,而且我已经看到很多网站和文章都要求这样做。但是我无法在下一个控制器的 $stateParams
中获取它。
我知道这方面有很多问题,我也经历过很多。我仍然被困住了。 谁能看出我错在哪里?
$scope.setup = function (ev, item, parent) {
console.log("event", ev);
console.log("item", item);
console.log("parent in clusters", parent);
ev.preventDefault();
if(item!==null){
var path = parent.id + '.' + item.code;
path = path.replace(/\s+/g, '').toUpperCase();;
if (!$(ev.target).closest('a').is('[disabled]')) {
$rootScope.child = item;
$rootScope.parent = parent;
console.log("parent", $rootScope.parent);
$state.go('setup', {
targetYear: $scope.targetYear,
path: path
// ,'child': item,
// 'parent': parent
});
}
}
else {
console.log("trade in trade", parent);
console.log("items from scope", $scope.items);
var path = parent.name.trim();
path = path.replace(/\s+/g, '').toUpperCase();
var totalTradesInOverview = $scope.items;
console.log("parent", $rootScope.parent);
$state.go('setup', {
targetYear: $scope.targetYear,
path: path,
params: totalTradesInOverview
});
}
};
我想我应该在另一个控制器中直接在 $stateParams
中获取它。我错了吗?
以下是我的状态声明部分,如果这很重要的话:
module.config(function ($stateProvider) {
$stateProvider.state('setup', {
url: '/setup/:targetYear/:path',
views: {
"main@": {
controller: 'TargetsSetupController as model',
templateUrl: 'app/targets/setup/setup.tpl.html',
// params: params
//I tried even this passing that variable in params like // params: totalTradesInOverview
},
"bar@": {
controller: 'AController',
templateUrl: 'comments.tpl.html'
}
}
}
});
});
只能通过 $stateParams
.
在您的示例中,您的 "setup"
状态声明具有以下 URL:'/setup/:targetYear/:path'
,这意味着它需要 targetYear
和 path
参数。
您正在尝试传递第三个参数 (params
) 但它不可见,因为它不是预期的。
要传递第三个参数,您可以在状态声明中的特殊 params
对象中声明它,并使用一些默认值(注意命名冲突 - 也许这就是您混淆的根源?):
$stateProvider.state('setup', {
url: '/setup/:targetYear/:path',
views: {...},
params: {
params: []
}
});
现在 params
参数应该在 $stateParams 中可见。
如果我是你,我会在上面的状态声明和你的 $state.go
声明中将 params
重命名为 totalTradesInOverview
,以避免混淆。
另请参阅 $stateProvider.state documentation 了解可应用于传递参数的更多选项。