2013-05-17 12 views
6

Myślę, że to powinno być proste, ale brakuje mi czegoś. Jak mogę przekazać poniżej flowObj w mojej ng-repeat mojej dyrektywie? Chciałbym przekazać go do mojej dyrektywy, a następnie kliknąć, aby użyć FlowObj, a następnie zastosować pewną logikę. Próbowałem użyć skomentowanego kodu w mojej dyrektywieAngularJs przekazać instancję każdego powtórzenia ng w HTML do dyrektywy

Ale wydaje się, że zepsuć moje css.

HTML:

<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
      <div id="center_outer"> 
       <div id="center_inner" ng-controller="CtrlPageFlow"> 
        <div flowclick class="cflow" ng-repeat="flowObj in flows" > 
         {{flowObj.name}} 
        </div> 
       </div> 
      </div> 
    </body> 
</html> 

Oto moja dyrektywa

angular.module('directives', ['opsimut']).directive('flowclick', function() { 
    return { 
     /* 
     scope: { 
      test:"@" // set the attribute name on the directive's scope 
     }, 
     */ 
     link: function(scope, elem, attr) { 
      elem.bind('click', function(scope) { 
       debugger; 
       alert(scope.flowObj); 
       //scope.name += '!'; 
       //scope.$apply(); 
      }); 
     } 
    }; 
}); 

rozwiązanie oparte na odpowiedź:

angular.module('directives', ['opsimut']). 
    directive('flowclick', function() { 


     return { 



        link: function(e, elem, attr) { 
        // scope is the directive's scope, 
        // elem is a jquery lite (or jquery full) object for the directive root element. 
        // attr is a dictionary of attributes on the directive element. 
        elem.bind('click', function(e1) { 

         debugger; 

         alert(e.flowObj); 


        },e); 
        } 
     }; 


    }); 

Odpowiedz

7

ROZWIĄZANIE: Usuń całą scope własność z dyrektywą i wszystko powinien działać jako exp ect.

TAKŻE: Musisz zmienić nazwę scope argumentu z tej linii:

elem.bind('click', function(scope) { 

do czegoś podobnego:

elem.bind('click', function(e) { 

ponieważ jesteś nadpisywania dostęp do scope w przypadku obsługi za pomocą tej samej nazwy.

WYJAŚNIENIE:

Dyrektywa ng-repeat powoduje, każdy z jego klonów, aby mieć swój własny nowy zakres. Ponieważ dyrektywy dotyczące elementu współdzielą zakres domyślnie, wszystkie inne dyrektywy umieszczone obok ng-repeat udostępniają swój zakres i mają dostęp do zmiennych bieżących iteracji $scope. Innymi słowy, twoja dyrektywa niestandardowa już dzieli zakres z ng-repeat i ma domyślnie dostęp do flowObj.

Przyczyną, dla której nie działała podczas określania właściwości scope na własnej dyrektywie, jest to, że dyrektywa ma własny zakres izolatów, który nie był udostępniany z ng-repeat, więc nie masz dostępu do zmiennych na klonach "zakresy.

Powiązane problemy