0

我的目標是有一個指令,我給它的內容,並重復它們X次。就像ng-repeat一樣,只有我想將其包含在其他功能中,例如限制切換和超鏈接內容外的額外元素。AngularJS transclude ng-repeat指令中的作用域

出於某種原因,無論我嘗試什麼,由於某種原因,跨接無法訪問指令隔離範圍。

我在link裏面使用了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); 
     }); 
    } 
    } 
}); 

如果你看一下plunkr,你會看到transclusion外{{item}}是可用的,但不在裏面。不管link函數的內容是應該照顧它的。任何想法我可以做什麼?

+0

我不能讓你要去什麼工作......但或者,我沒有得到它的工作沒有通過將其他指令放在模板中就可以實現transclude ...以下是PLUNK,以防萬一它對您有所幫助https://plnkr.co/edit/v7oFnukZxHMEi3xasFmc?p=preview – tarrball

+0

沒關係,如果我只有一個用例,但在我的使用中,我將不得不復制這個指令的每一個用例,我已經失去了指令的目的 – casraf

回答

1

transclude:true,同時保持到所述內容是從transcluded(在我們的情況下,範圍的參考transcludes的內容,repeat-contents將transclude <other-directive other-item="item"></other-directive>,同時保持於外範圍的參考。item未在外部範圍和事實定義你的隔離範圍定義item是無關的外部範圍

如果你只是想transclude模板而不保持引用到它的原有範圍,你可以使用下面的diective而不是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> 
+0

我得到了那個錯誤拋出或者被告知transcludeFn不是一個函數。 – casraf

+1

@casraf您仍然必須在'repeatContents'指令中使用'transclude:true'。只需將'ng-transclude'更改爲'custom-transclude'。 Hee是一名有活力的笨蛋。 https://plnkr.co/edit/jl8veC?p=preview –

+0

當你在上面的工作演示中從「repeatContents」指令中取出「鏈接」時,它似乎更清晰一些。這證明了實際發生的情況,以及爲什麼您在最後看到額外的「其他項目:」。 – Craig

相關問題