【发布时间】:2014-04-16 20:32:30
【问题描述】:
是否可以在 Angular 中执行以下操作?
<div ng-controller="MainCtrl" ng-init="name='World'">
<test name="Matei">Hello {{name}}!</test> // I expect "Hello Matei"
<test name="David">Hello {{name}}!</test> // I expect "Hello David"
</div>
我的指令很简单,但它不起作用:
app.directive('test', function() {
return {
restrict: 'E',
scope: {
name: '@'
},
replace: true,
transclude: true,
template: '<div class="test" ng-transclude></div>'
};
});
我还尝试使用 transclude 函数来更改范围并且它有效。唯一的问题是我丢失了模板。
app.directive('test', function() {
return {
restrict: 'E',
scope: {
name: '@'
},
transclude: true,
template: '<div class="test" ng-transclude></div>',
link: function(scope, element, attrs, ctrl, transclude) {
transclude(scope, function(clone) {
element.replaceWith(clone);
});
}
};
});
是否可以在保留模板并克隆以附加到具有ng-transclude 属性的元素的同时执行此操作?
这是一个 Plnkr 链接,您可以使用它来测试您的解决方案:http://plnkr.co/edit/IWd7bnhzpLmlBpoaoJct?p=preview
【问题讨论】:
-
Transclusion 改变了范围嵌套的方式,允许您包含绑定到外部范围的任意内容,这样您不必为它们提供模型。我会回到您的用例,并确切地确定您要在这里实现的目标。
标签: javascript angularjs angularjs-directive angularjs-scope