是否可以在AngularJS中的已定义路径中传递您自己的变量?
我这样做的原因是因为我必须对同一页面的数据表示(一个是根据JSON数据的过滤视图),我需要做的就是给$ params一个布尔标志数组,让控制器功能知道该页面被过滤或未过滤。
这样的事情:
var Ctrl = function($scope, $params) {
if($params.filtered) {
//make sure that the ID is there and use a different URL for the JSON data
}
else {
//use the URL for JSON data that fetches all the data
}
};
Ctrl.$inject = ['$scope', '$routeParams'];
angular.modlule('App', []).config(['$routeProvider', function($routes) {
$routes.when('/full/page',{
templateURL : 'page.html',
controller : Ctrl
});
$routes.when('/full/page/with/:id',{
templateURL : 'page.html',
controller : Ctrl,
params : {
filtered : true
}
});
}]);
答案 0 :(得分:21)
根据$routeProvider
documentation,route
的{{1}}参数具有属性$routeProvider.when()
:
应该注入控制器的可选依赖关系图。
这样的事情应该有效:
resolve
答案 1 :(得分:1)
AFAIK目前无法为路线指定其他参数。说完这个之后,可以通过测试if来轻松覆盖您的用例:id被定义为$routeParams的一部分。
问题是AngularJS会在'/ full / page'或'/ full / page / with /:id'上匹配你的路由,所以只需在你的控制器中测试$ routeParams的id存在:
if ($routeParams.id)
你知道在哪种情况下。
另一种方法是为不同的路线使用不同的控制器。
答案 2 :(得分:0)
function caseFilterCtrl($scope, $routeParams, $http) {
$http.get('./data/myDatas.json').success( function(data){
var arr = new Array();
for(var i=0; i < data.length; i++){
if(data[i].filter == $routeParams.id){
arr.push(data[i]); }
}
$scope.filtered= arr;
});
}
caseFilterCtrl.$inject = ['$scope', '$routeParams', '$http']; //for minified bug issue
和路线:
angular.module('myFilterApp', []).
config(['$routeProvider', function($routeProvider){
$routeProvider.when('/filter/:id', {templateUrl: './view/partial/filter.html', controller: caseFilterCtrl});
$routeProvider.otherwise({redirectTo: '/filter/01'});
}
]);
答案 3 :(得分:0)
您可以直接通过$route.current.$$route
获取潜行参数。
function Ctrl($scope, $route) {
var filtered = $route.current.$$route.params.filtered;
}
angular.modlule('App', []).config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/full/page/with/:id',{
templateURL: 'page.html',
controller: Ctrl,
params : {
filtered : true
}
});
}]);
虽然它有用,但我还是更喜欢resolve
解决方案。 <{1}}(或您选择的任何名称)可能会在将来的版本中被angularjs覆盖。