无法在AngularJS + AngularUI中使用简单的树

时间:2015-10-16 12:02:25

标签: angularjs angular-ui angular-ui-tree

所有必需的库都可​​用。但我收到错误:

angular.js:11855 Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: item in list, Duplicate key: string:", Duplicate value: "
http://errors.angularjs.org/1.3.15/ngRepeat/dupes?p0=item%20in%20list&p1=string%3A%22&p2=%22
    at REGEX_STRING_REGEXP (angular.js:263)
    at ngRepeatAction (angular.js:24831)
    at Object.$watchCollectionAction [as fn] (angular.js:14373)
    at Scope.$get.Scope.$digest (angular.js:14508)

我可以通过将$ index添加到ng-repeat来修复此问题,但这与主页上提供的示例代码不同:https://github.com/angular-ui-tree/angular-ui-tree

index.html:

<!doctype html>

<html ng-app="app">

<head>

<script src="js/jquery-1.11.2.js"></script>
<script src="js/angular.js"></script>
<script src="js/angular-ui-tree.js"></script>
<script src="tree.js"></script>
<link rel="stylesheet" href="js/angular-ui-tree.min.css" />

</head>

</head>


<body ng-controller="MainCtrl">


        <div>

            <div ui-tree>
  <ol ui-tree-nodes="" ng-model="list">
    <li ng-repeat="item in list  track by $index" ui-tree-node>
      <div ui-tree-handle>
        {{item.title}}
      </div>
      <ol ui-tree-nodes="" ng-model="item.items">
        <li ng-repeat="subItem in item.items  track by $index" ui-tree-node>
          <div ui-tree-handle>
            {{subItem.title}}
          </div>
        </li>
      </ol>
    </li>
  </ol>
</div>
</div>

</body>

<div ui-tree>
  <ol ui-tree-nodes="" ng-model="list">
    <li ng-repeat="item in list" ui-tree-node>
      <div ui-tree-handle>
        {{item.title}}
      </div>
      <ol ui-tree-nodes="" ng-model="item.items">
        <li ng-repeat="subItem in item.items" ui-tree-node>
          <div ui-tree-handle>
            {{subItem.title}}
          </div>
        </li>
      </ol>
    </li>
  </ol>
</div>
</html>
tree.js : 

var app = angular.module('app' , ['ui.tree']);

app.controller('MainCtrl',function($scope, $timeout) {

    $scope.list = "[{ \"id\": \"1\", \"title\": \"1. dragon-breath\", \"items\": [] }]"

                });

更新:

“不工作”我的意思是屏幕上没有显示任何内容,只是错误返回到控制台。

2 个答案:

答案 0 :(得分:1)

  

我可以通过将$ index添加到ng-repeat来修复此问题,但这与主页上提供的示例代码不同

您的示例数据(请参阅$scope.list)也与github项目页面上提供的示例中的示例数据不同。这就是为什么你必须添加track by才能摆脱错误。

为什么会收到错误:

您收到错误是因为您将$scope.list声明为字符串:

$scope.list = "[{ \"id\": \"1\", \"title\": \"1. dragon-breath\", \"items\": [] }]"

这是一个字符集合,它有重复的字符。例如,{中有多个i$scope.list

应该更像是:

$scope.list = [{ 
    "id": "1", 
    "title": "1. dragon-breath", 
    "items": [] 
}];

答案 1 :(得分:0)

有两个问题$ scope.list是一个字符串,使用如下

 $scope.lists = [{ "id": "1", "title": "1. dragon-breath", "items": [] }];

就ui-tree而言,使用$$hashkey而不是$index,所以它将是

ng-repeat="list in lists track by list.$$hashKey"

ng-repeat="list in lists track by $id(list)"