AngularJS-如何从URL中删除索引

AngularJS-如何从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

现在使用类似于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.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循环。