AngularJS:从控制器中注入指令中的字符串

时间:2015-01-21 21:15:37

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

有没有办法在指令模板中插入角度变量作为字符串?例如{{row.name}},因此angular不会仅在指令中在页面中解释它。像这样的东西:

指令模板:

<div>
   <div ng-transclude ng-repeat="row in data"> 
   </div>
</div>

用例: 我从控制器向数据数组发送指令。 person.name =&#34; John&#34;,person.name =&#34; Mike&#34;。 对于这种情况,我的页面看起来像:

....
<div my-directive>
   Name: {{row.name}}
</div>

从另一个控制器发送数据: car.weight = 13,car.weight = 44 对于这种情况,我的页面看起来像:

....
<div my-directive>
   Weight: {{row.weight}}
</div>

结果将是: 名称: 名称: 要么 重量: 重量:

这是因为{{row}}未定义

这是可能的还是我理解了所有错误,还有另一种方法吗?

1 个答案:

答案 0 :(得分:2)

您需要将row属性添加到转换范围。这是因为ng-transclude指令的范围不是从my-directive范围继承,而是从外部(页面)范围继承。

一种方法是创建特殊的转换指令:

module.directive('myDirectiveTransclude', function() {
  return {
    link: function($scope, elem, attrs, ctrl, $transclude) {
      $transclude(function(dom, transclusionScope) {
        transclusionScope.row = $scope.row;
        return elem.append(dom);
      });
    }
  };
});

然后用它替换ng-transclude

<div>
    <div my-directive-transclude ng-repeat="row in data"> 
    </div>
</div>