0

Ich versuche, auf die Daten in einer ng-Wiederholung von der Link- oder Controller-Funktion der Direktive zuzugreifen. Mein Anweisungscode sieht so aus.Zugriff auf den Bereich von Link-Funktion in Direktiven AngularJs?

app.directive('ssLeftNavDirective', function($rootScope) { 
// Runs during compile 
    return { 
     templateUrl: 'leftnavmenu.html', 
     scope: { 
      displayMode: '=' 
     }, 
     controller: function($scope) { 
      $scope.tests = ['health check', 'Performance Monitor', 'Compare Test', 'API Helpdesk']; 
      $scope.troubleshooting = ['Trouble Shooting 1', 'Trouble Shooting 2', 'Trouble Shooting 3']; 
      $scope.help = ['Help 1', 'Help 2', 'Help 3']; 
      $scope.settings = ['Settings 1', 'Settings 2', 'Settings 3']; 
     }, 
     link: function($scope, iElm, iAttrs, controller) { 
      $scope.menuDisplayed = true; 
      $scope.tests = ['health check', 'Performance Monitor', 'Compare Test', 'API Helpdesk']; 
      $scope.troubleshooting = ['Trouble Shooting 1', 'Trouble Shooting 2', 'Trouble Shooting 3']; 
      $scope.help = ['Help 1', 'Help 2', 'Help 3']; 
      $scope.settings = ['Settings 1', 'Settings 2', 'Settings 3']; 
     } 
    }; 
}); 

Ich fügte es sowohl in Controller und Link, um es zu testen.

Und dies ist die Richtlinie Vorlage:

<div id="menudiv"> 
<nav id="leftnavmenu" ng-class="menuDisplayed ? 'navon' : 'navoff'"> 
    <a href="#" ng-repeat="nav in displayMode">{{nav}}</a> 
</nav> 
<i class="fa hamburgermenu" aria-hidden="true" 
      ng-class="menuDisplayed ? 'menuon fa-times' : 'menuoff fa-bars'" 
      ng-click="menuDisplayed = !menuDisplayed"> 
</i> 

Im Haupt HTML I der Richtlinie und Umfang Wert wie folgt ich hinzufügen.

<ss-left-nav-directive display-mode="tests"></ss-left-nav-directive> 

Warum werden keine Tests aus dem Anzeigemodusbereich übergeben? Was mache ich hier falsch?

+0

, wenn der 'tests' Array gehört Ihre Direktive, dann sollten Sie keinen Isolate-Bereich verwenden müssen, um sie zu erhalten. Sie können einfach $ scope.tests verwenden, um sie abzurufen. Wenn es zum übergeordneten Controller gehört, sehen Sie sich die Antwort von @ 32teeth unter – Ladmerc

+0

an. Der Directivity-Controller und die Direktive Link-Funktion greifen auf den ** isolate ** * child * -Umfang der Direktive zu. Das directional bidirektionale '=' bound-Attribut greift auf die * parent * scope-Variablen zu. Weitere Informationen finden Sie in [AngularJS-Entwicklerhandbuch - Isolierung des Geltungsbereichs einer Richtlinie] (https://docs.angularjs.org/guide/directive#isolating-the-scope-of-a-directive) – georgeawg

Antwort

0

Sie definieren tests an der falschen Stelle. Anstatt es in der Link-Funktion oder dem Controller der Richtlinie zu definieren, sollte es in dem Controller der Vorlage definiert werden, in der die Richtlinie verwendet wird. Also für,

<div ng-controller="AppController"> 
    <ss-left-nav-directive display-mode="tests"></ss-left-nav-directive> 
</div> 

Im AppController (oder welche auch immer Controller tests binded zu),

app.controller('AppController', function ($scope) { 
     $scope.tests = ['health check', 'Performance Monitor', 'Compare Test', 'API Helpdesk']; 
    }); 

Und die folgende Richtlinie sollte funktionieren,

app.directive('ssLeftNavDirective', function ($rootScope) { 
    // Runs during compile 
    return { 
     templateUrl: 'leftnavmenu.html', 
     scope: { 
      displayMode: '=' 
     }, 
     controller: function ($scope) { 
      $scope.menuDisplayed = true; 
     }, 
     link: function ($scope, iElm, iAttrs, controller) { 
     } 
    }; 
}); 
Verwandte Themen