Angularjs中的子串使用过滤器?

时间:2013-12-05 07:42:20

标签: javascript angularjs

我正在使用带有一些过滤器的Angularjs在DOM中操作以下数组

$scope.urls = [{
    path: 'http://a.com/index'        
    }, {
     path: 'http://a.com/home'        
    }, {
    path: 'http://a.com/etc'        
    }, {
    path: 'http://a.com/all'        
   }];

我曾尝试使用过滤器对路径进行子串,但它无效。

Fiddle Demo

任何帮助都很棒。

2 个答案:

答案 0 :(得分:1)

试试这个:

<强> HTML

<div ng-controller = "fessCntrl"> 
  <h1>Only path without domain name:</h1>
        <ul>
            <li ng-repeat="url in urls | myCustomFilter">{{url.path}}</li>
        </ul>
</div>

<强> JS

var fessmodule = angular.module('myModule', []);

fessmodule.controller('fessCntrl', function ($scope) {
     $scope.urls = [{
        path: 'http://a.com/index'        
    }, {
         path: 'http://a.com/home'        
    }, {
        path: 'http://a.com/etc'        
    }, {
        path: 'http://a.com/all'        
    }];

    $scope.otherCondition = true;
});
fessmodule.$inject = ['$scope'];

 fessmodule.filter('myCustomFilter', function() {
   return function( urls) {
    var filtered = [];

    angular.forEach(urls, function(url) {
        filtered.push( {path:url.path.substring("http://a.com".length, url.path.length)});
    });

    return filtered;
  };
});

演示 Fiddle

作为旁注:

尝试从控制器中写入过滤器。

答案 1 :(得分:1)

AngularJS v 1.4.5支持带有参数长度和偏移的数组(包括字符串)的标准“limitTo”过滤器:

<div ng-controller = "SampleController"> 
  <h1>Result of substring equivalent filter:</h1>
        <ul>
            <li ng-repeat="url in urls">{{url.path | limitTo:5:12}}</li>
        </ul>
</div>

注意:如果动态域长度(“http://a.com”静态长度为12),此解决方案将失败。

注2 :将长度增加到最大路径长度(Max为“index”,长度为5)。

AngularJS支持

Overview of all filters开箱即用。