1

I have this crud URL format:

domain.com/config/someconfig/edit/2

Where I open the form ready to be prepped with the contents from record of id 2.

How, can I just get the 2 from the URI?

The easiest way possible would be something like:

if($location._uriseg(4) && typeof $location._uriseg(4) === 'number') then...

Is angular.js missing something like this?

4

3 回答 3

5

这是通过 $routeProvider.when 设置的角度路线吗?如果是这样,您可以使用 $routeParams 来获取值。就像是:

$routeProvider.when('/thing/:thingId', {
    templateUrl: 'thing.html',
    controller: ThingCntl
});

然后在您的控制器中,您可以使用 $routeParams.thingId 来访问该值

于 2013-08-21T20:56:39.800 回答
4

为 angular 创建了一个过滤器,以使该方法 (_uriseg) 可用:

app.filter('_uriseg', function($location) {
  return function(segment) {
    // Get URI and remove the domain base url global var
    var query = $location.absUrl().replace(BASE_URL,"");
    // To obj
    var data = query.split("/");    
    // Return segment *segments are 1,2,3 keys are 0,1,2
    if(data[segment-1]) {
      return data[segment-1];
    }
    return false;
  }
});

现在我可以打电话了:

$scope.email = $filter('_uriseg')(3);

因此,使用此过滤器可以获取任何 URL 段的值。

我仍然相信 angular.js 有类似的东西,如果有人愿意分享默认方法,谢谢。


我还创建了另一个过滤器来帮助那里的 codeigniter 研究员,从 URI 获取控制器操作,codeigniter 样式:

app.filter('getCImr', function($location) {
  return function(controller) {
    // Get URI and remove the domain base url global var
    var query = $location.absUrl().replace(BASE_URL,"");
    // To obj
    var data = query.split("/");
    // Remove CI controller
    delete data[0];    
    var result = {};
    // Map action and record ID/Whatever
    result[data[1]] = data[2];
    return result;
  }
});

因此,假设您的 codeigniter URI 类似于:

domain.com/controller/function/id

你可以做一个:

$scope.id = $filter('getCImr')('controller')['function'];

要得到:

console.log($scope.id); // id

不管怎么说,还是要谢谢你。

于 2013-08-21T22:56:03.823 回答
0

我的版本是codeigniter方式..

angular.module('myApp.Filters', [])
.filter('uri', function($location) {
    return {
        segment: function(segment) {
            var data = $location.path().split("/");
            if(data[segment-1]) { return data[segment-1]; }
            return false;
        },
        total_segments: function() {
            var data = $location.path().split("/");
            var i = 0;
            angular.forEach(data, function(value){
            if(value.length) { i++; }
            });
            return i;
        }
    };
});

//GET URI SEGMENT
$filter('uri').segment(0)
//GET SEGMENT LENGTH
$filter('uri').total_segments()
于 2013-12-02T16:42:45.790 回答