2017-01-23 2 views
1

Ich erstelle ein dynamisches Menü mit ng-click-Aktionsvorlage in DB konfiguriert ist.Angular 1.5.8 Component, übergeordneter Kontext in ng-repeat

<ul class="dropdown-menu dropdown-menu-right" id="widget-{{$ctrl.id}}-context-menu"> 
    <li ng-repeat="Menu in $ctrl.menu"> 
     <a href="" ng-click="$parent.evaluateFn(Menu.Template)">{{Menu.Name}}</a> 
    </li> 
</ul> 
  1. Wie kann ich Verweis auf den übergeordneten Kontext von ng-repeat bekommen, so dass ich die Vorlage Zeichenfolge analysieren kann (zB. ‚$ Ctrl.handleClick (‘ abc ‚)‘) ein Click-Ereignis zu machen ? $ parent und $ ctrl funktionieren nicht innerhalb von ng-repeat.
  2. Wie wird eine Zeichenfolge in ein ng-click-Ereignis konvertiert? Was soll ich in

Antwort

0

Die $scope mit Komponenten tun immer isoliert ist, bin ich nicht sicher, ob Sie es auf diese Weise zugreifen können, und Sie sollten nicht. Was Sie tun müssen, ist die Funktion von Ihrem übergeordneten Controller/Komponente zu binden.

Bind die Funktion der Mutter: ($ctrl ist die Mutter hier)

<my-component action="$ctrl.evaluateFn"> 

in Ihre Komponente die Bindung:

bindings: { 
    action: '&' 
} 

es in Ihrem Markup verwenden:

<ul class="dropdown-menu dropdown-menu-right" id="widget-{{$ctrl.id}}-context-menu"> 
    <li ng-repeat="Menu in $ctrl.menu"> 
     <a href="" ng-click="$ctrl.action(Menu.Template)">{{Menu.Name}}</a> 
    </li> 
</ul> 

Sie können verwenden, was Sie wollen anstelle von action.

https://docs.angularjs.org/guide/component

+0

Hier ng-Klick = „$ ctrl.action (Menu.Template)“ wird für mich nicht, weil ich muss nur eine Funktion im Component-Controller aufrufen, keine Funktion in der Seite, Die Komponente wird verbraucht. Problem ist, ng-repeat erstellt einen weiteren Kontext in seinem Block und ich kann nicht "$ ctrl" verwenden, um den Controller zu verweisen. Ich habe versucht "$ Eltern" aber nicht funktioniert. –

+0

Sie können '$ ctrl' innerhalb von' ng-repeat' verwenden. Wenn das nicht funktioniert, haben Sie andere Probleme. Bitte geben Sie einen Codepen an. – kuhnroyal

+0

Danke. Es war mein Fehler. $ ctrl arbeitet jetzt. –