AngularJS-如何从URL中删除索引
现在使用类似于test.com/#/album/0/此处的slug这样的url可以很好地工作,但我正在尝试实现test.com/#/album/此处的slugAngularJS-如何从URL中删除索引,angularjs,Angularjs,现在使用类似于test.com/#/album/0/此处的slug这样的url可以很好地工作,但我正在尝试实现test.com/#/album/此处的slug <a ng-href="#/album/{{$index}}/{{project.slug}}">{{project.title}}</a> (function() { var app = angular.module('chp', ['ngRoute', 'projectControllers']); app
<a ng-href="#/album/{{$index}}/{{project.slug}}">{{project.title}}</a>
(function() {
var app = angular.module('chp', ['ngRoute', 'projectControllers']);
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/', {
templateUrl: 'partials/directory.html',
controller: 'ProjectsCtrl'
}).
when('/album/:id', {
templateUrl: 'partials/album.html',
controller: 'ProjectDetailCtrl'
}).
when('/album/:id/:slug', {
templateUrl: 'partials/album.html',
controller: 'ProjectDetailCtrl'
}).
otherwise({
redirectTo: '/'
});
}]);
var projectControllers = angular.module('projectControllers', []);
projectControllers.controller('ProjectsCtrl', ['$scope', '$http',
function ($scope, $http) {
$scope.projects = albums;
$scope.filters = { };
}]);
projectControllers.controller('ProjectDetailCtrl', ['$scope', '$routeParams', '$sce',
function($scope, $routeParams, $sce) {
$scope.project = albums[$routeParams.id];
}]);
(功能(){
var app=angular.module('chp',['ngRoute','projectControllers']);
app.config(['$routeProvider',
函数($routeProvider){
$routeProvider。
当(“/”{
templateUrl:'partials/directory.html',
控制器:“ProjectsCtrl”
}).
当('/album/:id'{
templateUrl:'partials/album.html',
控制器:“ProjectDetailCtrl”
}).
当('/album/:id/:slug'{
templateUrl:'partials/album.html',
控制器:“ProjectDetailCtrl”
}).
否则({
重定向到:'/'
});
}]);
var projectControllers=angular.module('projectControllers',[]);
projectControllers.controller('ProjectsCtrl',['$scope','$http',
函数($scope,$http){
$scope.projects=相册;
$scope.filters={};
}]);
projectControllers.controller('ProjectDetailCtrl'、['$scope'、'$routeParams'、'$sce',
功能($scope、$routeParams、$sce){
$scope.project=相册[$routeParams.id];
}]);
当我删除id并尝试只链接到slug时,它不会加载到数据中。到目前为止,我唯一的工作方法是添加第二个路由,其中包括这两个路由。有没有办法去掉url中的索引?你需要删除带有
:id
的两个路由,并替换为带有:\slug
的路由d您可以从相册中筛选相册以获取索引
你可以做:
在路由器中:
when('/album/:slug', {
templateUrl: 'album.html',
controller: 'ProjectDetailCtrl'
}).
在控制器中
function($scope, $routeParams, $sce) {
albums.some(function(album, idx){
/*Search for a match*/
if(album.slug === $routeParams.slug){
/*Match found, set album and its index and break out*/
$scope.album = album;
$scope.albumIdx = idx;
return true;
}
});
.你的意思是你不能做
/album/:slug
?它对我很好是的,对我不起作用。我应该说我的数据设置如下:var albums=[{title:'The title',slug:'The slug,},等等]实际上,您正在将“slug”设置为索引,以便能够在此处传递索引$scope.project=albums[$routeParams.id];而无需将索引放入URL。因此,我只想找出一种方法来获取slug属性等于slug值的特定相册的索引。据我所知,您将通过route param传递slug,然后需要将具有slug属性的相册中的索引与route中的slug值相匹配,对吗?@user2994560不客气。请注意使用数组。由于旧浏览器不支持某些数组,请阅读随附的链接。您可以在链接中使用垫片,也可以使用带中断的传统for循环。