目标
主要思想是在没有在路由提供程序中设置的$location.path()的情况下获得:param
()。
描述
假设我的应用程序必须用一个param定义随机路径。因此,我将使用循环函数为干净的代码和干问题定义所有这些。
例如:
// get pool of paths from server and set them dynamically
pathsApi.get().then(function(res){
// just example for demonstrate
res.data = ['search1','search2','search3','search4'];
angular.forEach(res.data, function(route,key){
.when('/search/' + route + '/:search', route.resolve('Search', '/', 'svm'));
});
});
// other regular paths
.when('/home', route.resolve('Home', '/', 'hvm'));
.when('/help', route.resolve('Help', '/', 'hlvm'));
Grat。一切都很好。现在我有很多可以进入的道路。
问题/我需要的建议
我有个指令可以做一些事情。其中之一是检查位置是否包含单词搜索,如果是的话,我想知道搜索路线的名称。
例如:
用户转到/#/search/search3/someText
。
我要去找/#/search/search3
。
当然,我可以使用拆分和其他技术。但我知道角知道someText
是一个param (称为:search
)。因此,我确信角可以告诉我,没有:search
的情况下,什么是:search
,所以它将仅仅是我前面提到的路径。
我正在寻找优雅的方式通过角度,没有混乱的代码,分裂或假设。我不想用$location.search或$location.hash代替。我想按原样保存URL方案。
发布于 2015-09-07 04:34:28
我找到了两个可能的快速解决方案,这取决于你是否喜欢它。
我用过angular-ui-router.
第一种方法是创建一个routes.json文件,在该文件中可以存储所有路由,然后在应用程序运行之前同步获取json,并将所有路由存储在$rootScope中,这样您就可以方便地在任何地方访问它们。使用此解决方案,您将始终将清晰的路径存储在json中。
var routes;
$.ajax({
url : 'routes.json',
method : 'GET',
dataType : 'json',
async : false
}).success(function(response){
routes = response;
});
// Routes
var Settings = function($stateProvider, $urlRouterProvider){
$stateProvider
.state(routes.HOME.name, {
url : routes.HOME.path
})
.state(routes.SEARCH.name, {
url : routes.SEARCH.path + '/' + routes.SEARCH.params
});
$urlRouterProvider.otherwise('/');
};
Settings.$inject = [
'$stateProvider',
'$urlRouterProvider'
];
app.config(Settings);
route.json
{
"HOME" : { "name" : "home", "path" : "/" },
"SEARCH" : { "name" : "search", "path" : "/search", "params" : ":params" }
}
第二个参数,因为没有直接参数可以告诉您清除路径,所以您可以使用$state.current.url,它告诉您当前url包含在$stateProvider配置中键入的所有参数: like :param或:search
然后,您可以使用$stateParams知道您设置了哪些参数,并使用字符串替换将其删除。
也许能帮到你
// Routes
var Settings = function($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url : '/',
template : 'home page'
})
.state('search', {
url : '/search/:param',
controller : 'SearchCtrl'
});
$urlRouterProvider.otherwise('/');
};
Settings.$inject = [
'$stateProvider',
'$urlRouterProvider'
];
app.config(Settings);
// Controller
var SearchCtrl = function($scope, $state, $stateParams){
// Parameters
var cleanPath;
// Methods
function initCtrl(){
cleanPath = getCleanUrlPath($state.current.url, $stateParams);
}
function getCleanUrlPath(url, params){
for( var param in params) {
// Remove from the url all params inside $stateParams
url = url.replace(':' + param, '');
}
return url;
}
// Initialize controller
initCtrl();
};
SearchCtrl.$inject = [
'$scope',
'$state',
'$stateParams'
];
app.controller('SearchCtrl', SearchCtrl);
https://stackoverflow.com/questions/32437029
复制相似问题