在md-virtual-repeat中使用angular指令

时间:2016-07-26 18:11:49

标签: angularjs angular-material

我正在尝试使用列表项的自定义指令实现Angular Material的Virtual Repeat,并且我遇到了将范围attrs绑定到指令的问题。

这就是我所拥有的:

HTML

<md-virtual-repeat-container id="vertical-container">
  <div md-virtual-repeat="item in ctrl.dynamicItems">
    <foo bar="item"></foo>
  </div>
</md-virtual-repeat-container>

JS

myApp.directive("foo", function(){
    return {
      restrict: "E",
      scope: {
        bar: "="
      },
      template: "<span>{{baz}}</span>",
      link: function(scope){
        scope.baz = "new " + scope.bar; 
      }
    }

问题

虚拟滚动部分中的项似乎在那里,但是当我期望它们是 new 1 时,它们的值显示为new undefined new 2 ,依此类推。

奇怪的是,有些项似乎确实正确显示了它们的值(即 new 11 new 12 ,有时 new 13 )。此外,如果相反我将我的指令模板替换为"<span>{{bar}}</span>",并且认为指令的链接功能不必要,问题就会得到解决。这让我认为问题在于链接的时间(这是我最好的猜测)。

以下是corresponding CodePen snippet的链接,以便进一步说明。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

最后解决了它 - CodePen

JS

  .directive("foo", function(){
    return {
      restrict: "E",
      scope: {
        bar: "="
      },
      template: "<span>{{test()}}</span>",
      link: function(scope){
        scope.test = function () {
          if (angular.isDefined(scope.bar)) {
            return "new " + scope.bar;
          }
        }
      }
    }