为什么我会得到"错误:' undefined'不是一个功能(评估' items.split(',')')"这里?

时间:2014-04-15 22:54:04

标签: angularjs

在输入由'completeList'过滤的字段时,我收到以下错误。为什么会这样?

的JavaScript


angular.module('myApp', ['timer'])

    .controller('AppCtrl',['$scope', function($scope){
        $scope.gameOn = true;
        $scope.leaders = true;
        $scope.myScore = true;
}])

    .filter('completeList', function() {
      return function(items) {
        var list = [];
        if(items) {
          list = items.split(',');
          var last = list[list.length - 1];
          if(items.charAt(items.length - 1) != ',' || last.length === 0)
            list.pop();
        }
        return list;
      };
});

HTML


  <div ng-show="gameOn" ng-controller="LabelCtrl" class="row marketing">
    <div class="col-lg-4">
      <h4>Enter comma-separated labels for this image</h4>
      <form role="form" class="form-inline" >
        <input ng-list ng-model="labels" placeholder="Enter labels" class="form-control" type="text" >
        <button class="form-control" class="btn btn-xs btn-success">Submit</button>
      </form>
    </div>

    <div class="col-lg-2">
      <h4>Labels</h4>
      <div>
        <ol>
          <li ng-repeat="label in labels track by $index | completeList">
            {{ label }}
          </li>
        </ol>
      </div>
    </div>

2 个答案:

答案 0 :(得分:0)

我不知道标签的数据结构是什么,所以这里是我最好的刺。过滤器应用于循环迭代的实例。看起来您可能正在尝试将过滤器应用于整个集合而不是循环的索引。过滤器适用于标签而非标签。在这种情况下,您无法拆分它。我再也不知道你的数据结构,所以我在这里猜测。如果你能揭示出什么标签会很有帮助。

谢谢,

约旦

答案 1 :(得分:0)

好消息是你只有一个小的Angular语法错误。它实际上在documentation

中提到
  

在指定a之前,应将过滤器应用于表达式   跟踪表达。

...

  

例如:'item in items | filter:searchText track by item.id'是一种模式,可用于将过滤器与跟踪表达式一起应用于项目。

鉴于这些知识,只需将您的ngRepeat行更改为以下内容,它确实可以按照您的预期工作,并且在我身边完美运行:

<li ng-repeat="label in labels | completeList track by $index">