Angularjs $stateParams中缺少参数
下面,我试图在Angularjs $stateParams中缺少参数,angularjs,angular-ui-router,state,Angularjs,Angular Ui Router,State,下面,我试图在$state中发送一个对象,并在$stateParams中检索它。我认为我做的是正确的,我也看到了许多网站和许多文章要求这样做。但是我无法在下一个控制器的$stateParams中获取它 我知道在这方面有很多问题,我也经历了很多。我还是被卡住了。 有人能看出我错在哪里吗 $scope.setup = function (ev, item, parent) { console.log("event", ev); console.log(
$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
对象中声明它,并使用一些默认值(注意命名冲突——可能这就是造成混淆的原因?)
现在,params
参数应该在$stateParams中可见
如果我是您,我会在上述状态声明和您的$state.go
语句中将params
重命名为totalTradesInOverview
,以避免混淆
有关可应用于传递参数的更多选项,请参阅。您的控制台错误是什么?另外,您是否已经为代码的完整视图设置了github repo?首先请确保。在执行$state.go()时,您正在正确设置变量。使用$stateparams激活url时,您是否只获得“params”值或“params”、“path”和“targetYear”值?您试图访问$stateparms的位置?我正在尝试访问即将到来的控制器(即TargetsSetupController)中的$stateparms。至于path和targetYear,我得到了这两个,因为正如您所看到的,我正在将它们附加到我的URL,并且它们正在被附加。但是,一旦加载了新状态,我希望从新控制器中的$stateParams检索“totalTradesInOverview”变量。唉!在那里,它表示undefinedYou指示在状态定义中传递一个param对象。但我想通过$state.go()中的控制器传递它。我把这个对象放在控制器中间的某个地方,然后我必须把它传递给下一个控制器。您建议如何将其保留在州定义中。我想我没听懂你的话。你能解释一下吗?首先,把你的状态定义改成我提供的(我省略了视图部分),然后检查它是否有效。如果是这样,我将尝试解释更多。此外,从您在问题下的评论中,我可以看出您希望该参数实际被调用
totalTradesInOverview
。然后,您应该在state(params:{totalTradesInOverview:[]}
)和state.go:$state.go('setup',{targetYear:$scope.targetYear,path:path,totalTradesInOverview:totalTradesInOverview})中这样命名它。
我按照您的要求修改了状态定义。现在我该如何从$state.go()传递我的对象目前我已将其更改为:$state.go('targets.targets setup',{targetYear:$scope.targetYear,path:path,params:totalTradesInOverview})
如果您在$stateProvider.state中定义了params:{params:[]}
,则调用$state.go('setup',{targetYear:$scope.targetYear,path:path,params:totalTradesInOverview}
(与您在原始文章中所做的完全相同)并在下一个控制器中读取$stateParams.params
。
$stateProvider.state('setup', {
url: '/setup/:targetYear/:path',
views: {...},
params: {
params: []
}
});