1

Nachdem ich die Konten und People-Array von meinem Entschlossenheit, wie bekomme ich Zugriff auf Personen und Konten in der Komponente Controller? Ich habe auch das defect acctTally im Haupt-ctl ausprobiert und binde es ohne Glück an die Komponente.Komponenten, Bindung in Angularjs1.5 - Übergabe von Daten von einem Controller zum anderen

Ich kann Menschen und Konto nur an die Komponente binden und greifen Sie darauf in der Komponente Vorlage, aber ich möchte arbeiten auf beide Array in der Komponente Controller ist, wo ich das Problem habe. Welches Schlüsselkonzept vermisse ich ????

Hauptsteuerung

angular.module('hellosolarsystem') 
    .controller('AcctCtrl', function($scope, accounts, people){ 
    $scope.accounts = accounts; 
    $scope.people = people; 
    }); 

Haupt Vorlage

<nav-bar></nav-bar> 
<acct-list people="people" accounts="accounts"></acct-list> 

Komponente

function aCtrl(){ 
     var ctrl = this; 
     ctrl.acctTally = []; 
     ctrl.uniqueAcct = []; 

     //Array of all accounts 
     $scope.people.data.forEach(function(person){ 
      person.account_types.forEach(function(account){ 
      ctrl.acctTally.push(account.name); 
      }) 
     }); 
     } 

angular.module('hellosolarsystem').component('acctList', { 
    bindings: { accounts: '<', 
       people: '<' 
      }, 
    controller: aCtrl, 


    templateUrl: 'javascripts/app/components/accounts/acctsList/index.html' 
}) 

Component Template

<table class = "table"> 
     <thead> 
      <tr> 
      <th>Accounts</th> 
      <th>Number of Accounts Assigned Users</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat = "acct in $ctrl.acctTally"> 
      <td>{{acct.name}}</td> 
      <td>{acct.tally}}<</td> 
      <td> 
       <button class = "btn btn-info" ng-click = "editUser($index)">Edit</button> 
       <button class = "btn btn-danger" ng-click = "deleteUser($index)">Delete</button> 
      </td> 
      </tr> 
     </tbody> 
     </table> 

Antwort

1

für Komponente Bindung nicht verfügbar, wenn Sie Controller-Funktion seit AngularJS 1.6 Release instanziiert wird. Überprüfen Sie breaking changes here. Bindungen werden verfügbar sein, wenn $onInit Hook im Gegensatz zu Angular 2+ aufgerufen wird. Auch könnten Sie das ältere Verhalten von vorab ausgefüllten Bindungen erzwingen, wenn Controller, indem Sie

.config(function($compileProvider) { 
    $compileProvider.preAssignBindingsEnabled(true); 
}) 

Aber tat oben sehr entmutigen durch Angular Team instanziiert wird.

Pro 1.6.0 brechen Änderungen müssen Sie Ihren Code auf $onInit Haken Ihr Problem zu lösen.

ctrl.$onInit = function() { 
ctrl.people.data.forEach(function(person){ 
    person.account_types.forEach(function(account){ 
     ctrl.acctTally.push(account.name); 
    }) 
}); 
} 
+1

Vielen Dank, ich hatte versucht mit $ onInit aber vergessen, ctrl daran zu befestigen! – user5852854

Verwandte Themen