3 回答
TA贡献1951条经验 获得超3个赞
如果要传递非URL状态,则url在设置时一定不要使用state。我在PR上找到了答案,并四处游逛以更好地理解。
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
然后,您可以像这样导航到它:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
要么:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
因此,在HTML中:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
该用例已在文档中完全揭露,但是我认为这是在不使用URL的情况下转换状态的有效方法。
TA贡献1829条经验 获得超4个赞
内森·马修斯(Nathan Matthews)的解决方案对我不起作用,但这是完全正确的,但没有解决之道:
关键点是:$ state.go的已定义参数和toParamas的类型在状态转换的两侧应为相同的数组或对象。
例如,当您按如下所示在状态中定义参数时,则表示参数是数组,因为使用了[[]]:
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
因此,您也应该像这样将toParams作为数组传递:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
您可以通过$ stateParams作为数组访问它们,如下所示:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
更好的解决方案是在两侧都使用对象而不是数组:
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
我在参数定义中将{]替换为{}。为了将toParams传递给$ state.go,您还应该使用object而不是array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
那么您可以通过$ stateParams轻松访问它们:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
- 3 回答
- 0 关注
- 892 浏览
添加回答
举报