2016-01-23 42 views
1

我想創建一個範圍指令來重複包含的x個x次。 像這樣:帶事件的自定義範圍角度指令

... 
.directive('raichuRange', function() { 
    return{ 
     scope:{ 
      range: '=raichuRange' 
     }, 
     transclude: 'element', 
     link : function(scope, element, attrs, ctrl, transcludeFn){ 
      var parent = element.parent(); 
      for(var i = 1;i<= scope.range;++i){ 
       var childScope = scope.$new(); 
       childScope.$index = i; 
       transcludeFn(childScope, function (clone) { 
        parent.append(clone); 
       }) 
      } 
     } 
    } 
}) 

的問題是這樣的:內的任何NG-點擊指令不會再回應。

+0

'ng-click'指令在[此JSFiddle](https://jsfiddle.net/zqh89mcu/)中適用於我。 – georgeawg

+0

感謝您的嘗試。有點奇怪。我也嘗試過某人刪除類似指令的代碼,並且遇到同樣的問題。我用ng-repeat,而我沒有。其他的東西必須被打破。 – raichu

+0

爲什麼不能正常工作? https://jsfiddle.net/pq1wkp90/ – raichu

回答

0

爲什麼不能正常工作? https://jsfiddle.net/pq1wkp90/

由於該指令使用的分離範圍,父功能不受該指令範圍或他們的子女繼承。

要訪問的指令使用的父範圍的功能:

ng-click="$parent.$parent.test($index)" 

使用一個$parent從transcluded元件訪問分離範圍。第二個$parent訪問隔離範圍的父級。

有關指令示波器的更多信息,請參閱AngularJS $compile API Reference -- scope


PS。同時將$scope.$index = $index + 1;更改爲$scope.$index = $scope.$index + 1;

+0

PSS。 'ng-repeat'不使用**隔離範圍**。您可能想要更改指令以使用'scope:false'並使用'scope。$ eval(attrs.range)'來評估'range'屬性。 – georgeawg