我需要在$ routeProvider中将变量传递给$ scope。代码如下:
.when('/:zone/edit/:id', {
templateUrl: 'views/edit.html',
controller: 'EditSet'
})
.when('/articles/edit/:id', {
templateUrl: 'views/edit-article.html',
controller: 'EditSet',
params: {zone: 'articles'}
})
要获得参数,我使用$scope.params.zone
,它适用于第一种情况(:zone),而不适用于第二种情况。
在这种情况下我该怎么做?
答案 0 :(得分:4)
所以我认为你最好使用templateUrl
中的功能支持来实现这个目标:
.when('/:zone/edit/:id', {
templateUrl: function(params) {
if (params.zone == "article") {
return 'views/edit-article.html';
}
return 'views/edit.html';
},
controller: 'EditSet'
})
答案 1 :(得分:4)
在您指定的顺序中,第二条路线永远不会被解析。
/:zone/edit/:id
将匹配:zone
的任何值。因此,/articles/edit/:id
将始终解析为/:zone/edit/:id
,/foo/edit/:id
或/asdhjkdajksa/edit/:id
也是如此。
此外,params: {zone: 'articles'}
不是路线的有效属性。如果在进入控制器之前需要设置数据,可以使用resolve
属性(虽然我不确定在这种情况下你需要什么)。
.when('/articles/edit/:id', {
templateUrl: 'views/edit-article.html',
resolve: { zone: 'articles-zone' },
controller: 'EditSet'
})
.when('/:zone/edit/:id', {
templateUrl: 'views/edit.html',
controller: 'EditSet'
})
我不知道$scope.params.zone
是如何为您工作的,在您将$routeParams.zone
注入控制器定义后应该是$routeParams
。使用上述路由和此控制器,您将获得以下值:
angular.module('app').controller('EditSet', function($scope, $routeParams, zone) {
console.log($routeParams.zone);
console.log(zone);
});
/articles/edit/1
-> 'articles'
-> 'articles-zone'
/batman/edit/1
-> 'batman'
-> undefined
请查看the example docs,了解如何正确设置路线格式。