预处理重复变量?

时间:2015-02-09 12:03:29

标签: angularjs

我正在使用ng-repeat在div中打印输出。 bCrumbs集合中的元素以斜杠和空格开头,我想从第一次循环迭代中删除它们。

我的代码:

<div ng-repeat="bCrumb in bCrumbs" id="{{bCrumb.name}}">{{ bCrumb.name }}</div>

{{ bCrumb.name }}的输出:

/ Test1
/ Test2

预期产出:

Test1
/Test2

2 个答案:

答案 0 :(得分:2)

您可以使用ng-repeat-startng-repeat-end

<div ng-repeat-start="bCrumb in bCrumbs" ng-if="$first>
    {{ beautify(bCrumb.name) }}
  </div>
  <div ng-repeat-end ng-if="!$first">
    {{ bCrumb.name }}
  </div>

此外,在控制器中定义一个名为beautify的函数:

$scope.beautify = function (name) {
  return name.replace('/ ', '');
};

您可以阅读详细文档here

更新

处理字符串美化的更好方法是创建一个处理它的过滤器

app.filter('beautify', function () {
    return function (data) {
        return data.replace("/ ", "");
    };
});

然后在您的视图模板中:

  <div ng-repeat-start="bCrumb in bCrumbs" ng-if="$first>
    {{ bCrumb.name | beautify }}
  </div>
  <div ng-repeat-end ng-if="!$first">
    {{ bCrumb.name }}
  </div>

答案 1 :(得分:0)

我认为您应该更改控制器(或生成bCrumbs的任何内容)以在到达视图之前去除斜杠。通过这种方式,它将更加可测试并且(希望)清晰。你可以这样做:

function strip(s) {
    if(s.indexOf('/ ') === 0) {
        return s.substring(2);
    } else {
        return s;
    }
}
$scope.bCrumbs = originalBCrumbs.map(function(bc, idx) {
    return idx === 0 ? strip(bc) : bc;
});
相关问题