Javascript AngularJS使用ng repeat在指令中转移范围
我的目标是有一个指令,我给它内容,它会重复X次。就像ng repeat一样,我只想将其包装在其他功能中,例如限制切换和转置内容之外的额外元素 出于某种原因,不管我怎么做,转换都无法访问指令隔离范围 我在Javascript AngularJS使用ng repeat在指令中转移范围,javascript,angularjs,angularjs-directive,angularjs-ng-transclude,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Transclude,我的目标是有一个指令,我给它内容,它会重复X次。就像ng repeat一样,我只想将其包装在其他功能中,例如限制切换和转置内容之外的额外元素 出于某种原因,不管我怎么做,转换都无法访问指令隔离范围 我在链接中使用了transclude函数,但在几个变体中都没有使用。下面是一个演示: 下面是代码的要点: app.directive('repeatContents', function() { return { scope: { items: '=repeatConte
链接
中使用了transclude
函数,但在几个变体中都没有使用。下面是一个演示:
app.directive('repeatContents', function() {
return {
scope: {
items: '=repeatContents',
limit: '=repeatLimit'
},
transclude: true,
template: '<div ng-repeat="item in items">' +
'<em>Outside transclude: {{item}}</em><br />' +
'<ng-transclude></ng-transclude>' +
'</div>',
link: function(scope, el, attrs, ctrl, transclude) {
transclude(scope, function(clone, scope) {
el.append(clone);
});
}
}
});
app.directive('repeatContents',function(){
返回{
范围:{
项目:'=repeatContents',
限制:'=重复限制'
},
是的,
模板:“”+
'外部转置:{{item}}
'+
'' +
'',
链接:函数(作用域、el、属性、ctrl、transclude){
转移(范围、功能)(克隆、范围){
el.追加(克隆);
});
}
}
});
如果您查看plunkr,您将看到外部的transclusion
{{{item}}
可用,但内部不可用。不管链接
函数的内容是什么,都应该处理它。你知道我能做什么吗?转移:true
转移内容,同时保留对内容转移范围的引用(在我们的例子中,重复内容
将在保留对外部范围的引用时转移
。项
未在外部范围中定义,并且您的独立范围定义了项
这一事实与外部范围无关
如果您只想转移模板而不保留对其原始范围的引用,则可以使用以下DIACTIVE,而不是ng transclude
:
app.directive('customTransclude', function(){
return {
link: function(scope, element, attrs, ctrls, transcludeFn){
if(!transcludeFn){
throw 'Illegal use of custom-transclude directive! No parent directive that requires transclusion was found';
}
transcludeFn(scope, function(clone){
element.empty().append(clone);
});
}
};
});
然后在repeat contents
指令的模板中,您可以这样使用它:
<div ng-repeat="item in items">
<em>Outside transclude: {{item}}</em><br/>
<custom-transclude></custom-transclude>
</div>
外部转包:{{item}}
我无法让你想要的东西发挥作用……但是,或者,我确实可以在没有transclude的情况下让它发挥作用,只需将另一个指令放入模板中……这是一个plunkr,如果我只有一个用例就可以了,但在我的使用中,我必须为我拥有的每个用例制作一份该指令的副本ch违背了指令的目的,我被抛出错误,或者被告知transcludeFn不是一个函数。@casraf您仍然必须在repeatContents
指令中使用transclude:true
。只有将ng transclude
更改为custom transclude
。Hee是一个有效的工具。我觉得它更清楚一点当您在上面的工作演示中将repeatContents指令中的“link”去掉时。这说明了实际发生的情况,以及为什么您在最后看到了附加的“Other item:”。