拆分ng重复项目?

Nic*_*ros 10 angularjs angularjs-ng-repeat

简单的问题 - 如果我在我的控制器中有这个:

$scope.somedata = 'Item 1, Item 2'; // set from something else
Run Code Online (Sandbox Code Playgroud)

有没有办法在ngRepeat表达式中为我的视图拆分somedata?就像是:

<div ng-repeat="item in somedata | split(',')">{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

哪个不起作用......

或者我必须这样做

$scope.somedata = 'Item 1, Item 2'; // set from something else
$scope.items = somedata.split(',');
Run Code Online (Sandbox Code Playgroud)

然后

<div ng-repeat="item in items>{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

我想我并没有真正理解我在AngularJS中的表达式中能做些什么.

fla*_*aky 28

我想我已经太迟了,但为什么不这样做呢:

<div ng-repeat="item in somedata.split(',')">{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

工作得很好.

JSBin的证据!

  • 这个答案更容易解决问题; 我认为定义一个过滤器会更容易,但最终这是一个更好的解决方案.不知道它是否是"Angular"做事的方式但是我喜欢它. (2认同)

red*_*ard 15

字符串右边的字符串|被解析为过滤器的名称(通常它们是字符串格式化过滤器,但是角度团队还提供了filter过滤器,它返回一个过滤的数组(有点误导,因为两者共享相同的名称).您可以创建自己的拆分过滤器来完成您想要的任务:

angular.module('myFilters', []).
  filter('split', function() {
    return function(input, delimiter) {
      var delimiter = delimiter || ',';

      return input.split(delimiter);
    } 
  });
Run Code Online (Sandbox Code Playgroud)

您可以像这样使用过滤器:

<div ng-repeat="item in somedata | split">
Run Code Online (Sandbox Code Playgroud)

或者指定分隔符:

<div ng-repeat="item in somedata | split:,">
Run Code Online (Sandbox Code Playgroud)

考虑上面的伪代码,因为我还没有测试过它.

Le plunker:http://plnkr.co/edit/hk6F0Y6p5YAXv6fyXfSz?p=preview