我想在内容更改时创建一个具有自定义行为的列表。我尝试为此创建一个指令,但我对如何将 ng-transclude 与 ng-repeat 指令结合起来有点迷茫。有人可以让我走上正轨吗?
html:
<div ng-app="myApp">
  <div ng-controller="ctrl">
    <mylist items="myItem in items">
       <span class="etc">{{myItem}}</span>
    </mylist>
  </div>
</div>
Javascript:
angular.module('myApp', [])    
.controller('ctrl', function ($scope) {
  $scope.items = ['one', 'two', 'three'];
})    
.directive('mylist', function () {
  return {
    restrict:'E',
    transclude: 'element',
    replace: true,
    scope: true,
    template: [
      '<ul>',
        '<li ng-repeat="WhatGoesHere in items" ng-transclude></li>',
      '</ul>'
    ].join(''),
    link: function (scope, element, attr) {
      var parts = attr.items.split(' in ');
      var itemPart = parts[0];
      var itemsPart = parts[1];
      scope.$watch(itemsPart, function (value) {
        scope.items = value; 
      });      
    }
  }
});
我有一部分在这里工作
编辑:
标准:
- 项目的模板必须在视图中定义,而不是在指令中,并且它必须能够访问子范围内的项目属性。理想情况下,我想像在 ng-repeat 指令中那样定义它
- 该指令必须有权访问该列表,以便我可以设置适当的手表并进行更改。如果可能的话,我希望能够轻松访问生成的 DOM 项目(我也可以使用它element[0].querySelectorAll('ul>li')或其他东西来实现,它只需要在 Chrome 上工作)。
- 如果可能的话,我想重用 ng-repeat 指令中的逻辑,因为它已经做了很多我想做的事情。最好我不想复制代码。我只想增强它的行为,而不是改变它