AngularJS : 在来自控制器的指令中注入字符串
AngularJS : Injecting string in directive from controller
有没有办法在指令模板中插入一个 angular 变量作为字符串?例如 {{row.name}},因此 angular 不会仅在指令中的页面中解释它。像这样:
指令模板:
<div>
<div ng-transclude ng-repeat="row in data">
</div>
</div>
一个用例:
我从控制器向指令发送数据数组。
person.name = "John", person.name = "Mike"。
对于这种情况,我的页面看起来像:
....
<div my-directive>
Name: {{row.name}}
</div>
我从另一个控制器发送数据:
car.weight = 13, car.weight = 44
对于这种情况,我的页面看起来像:
....
<div my-directive>
Weight: {{row.weight}}
</div>
结果将是:
姓名:
姓名:
或者
重量:
权重:
这是因为 {{row}} 未定义
这可能吗?还是我理解错了,还有另一种方法?
您需要将 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>
有没有办法在指令模板中插入一个 angular 变量作为字符串?例如 {{row.name}},因此 angular 不会仅在指令中的页面中解释它。像这样:
指令模板:
<div>
<div ng-transclude ng-repeat="row in data">
</div>
</div>
一个用例: 我从控制器向指令发送数据数组。 person.name = "John", person.name = "Mike"。 对于这种情况,我的页面看起来像:
....
<div my-directive>
Name: {{row.name}}
</div>
我从另一个控制器发送数据: car.weight = 13, car.weight = 44 对于这种情况,我的页面看起来像:
....
<div my-directive>
Weight: {{row.weight}}
</div>
结果将是: 姓名: 姓名: 或者 重量: 权重:
这是因为 {{row}} 未定义
这可能吗?还是我理解错了,还有另一种方法?
您需要将 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>