Angular 1指令不会在ng-repeat

时间:2017-10-30 13:55:17

标签: javascript angularjs angularjs-directive angularjs-ng-repeat custom-directive

我遇到Angular指令的问题。

我的目标是使用mmContentRow为作用域中的每个元素呈现指令ng-repeat。该指令mmContentRow有一个模板,其中呈现了另一个指令relativeDate

问题是relativeDate无法在mmContentRow内呈现。 到目前为止,我尝试了许多解决方案,但没有。这是代码:

parent.html

  <ul>
    <mm-content-row ng-repeat="report in selected.reports" date="report.reported_date"/>
  </ul>

mm-content-row.js

angular.module('inboxDirectives').directive('mmContentRow', function() {
  return {
    restrict: 'E',
    templateUrl: 'mm-content-row.html',
    scope: {
      date: '=',
    }
  };
});

mm-content-row.html

<li>
  <span>{{date}}</span>
  <relative-date date="{{date}}"></relative-date>
</li>

relative-date.js

angular.module('inboxDirectives').directive('relativeDate', ['FormatDate', function(FormatDate) {
  return {
    restrict: 'E',
    template: '<span>rendered something</span>',
    scope: {
      date: '=',
    }
  };
}]);

示例数据:

{ selected: {reports: 
[{reported_date: 1508493112758}, {reported_date: 1508493101933}]
} }

渲染输出:

<ul>
  <li>
    <span>1508493112758</span>
    <relative-date date="1508493112758"></relative-date>
  </li>
  <li>
    <span>1508493101933</span>
    <relative-date date="1508493101933"></relative-date>
  </li>
</ul>

预期产出:

<ul>
  <li>
    <span>1508493112758</span>
    <span>rendered something</span>
  </li>
  <li>
    <span>1508493101933</span>
    <span>rendered something</span>
  </li>
</ul>

据我所知,relative-date内的指令内的ng-repeat无法编译。我希望Angular能够自动编译它,但似乎没有发生。我应该明确告诉Angular在relative-date内编译mmContentRow吗?

更新:我创建了一个简化版本的问题:http://jsfiddle.net/cbrwizard/4e2r2o07/。一切都在那里工作。奇怪的!如果我弄清楚小提琴和我的代码之间的区别,我会在这里发布更新。

1 个答案:

答案 0 :(得分:0)

感谢@ appeiron的建议,我创建了一个小提琴http://jsfiddle.net/cbrwizard/4e2r2o07/让我理解这个问题是在Angular中,但在项目的代码中。

原来模板没有直接呈现,而是使用了一些正则表达式魔法来解析html文件。添加

$compile($(element).contents())(scope)

其中element是一个html文件字符串,足以让它工作。