Компоненты, связывающие в Angularjs1.5 - Передача данных с одного контроллера на другой

После того, как я получу массив учетных записей и людей из моего решения, как мне получить доступ к людям и учетным записям в контроллере компонента? Я также попытался определить acctTally в основном ctl и связать его с компонентом без удачи.

Я могу связать людей и учетную запись, просто найти компонент и получить к нему доступ в шаблоне компонента, но я хочу выполнить работу с любым массивом в контроллере компонента, где у меня возникла проблема. Какую ключевую концепцию мне не хватает????

главный контроллер

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

Основной шаблон

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

Составная часть

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'
})

Шаблон компонента

<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>

1 ответ

Решение

Привязка для компонента недоступна, когда создается экземпляр функции контроллера с момента выпуска AngularJS 1.6. Проверьте последние изменения здесь. Привязки будут доступны, когда $onInit Крюк вызывается в отличие от Angular 2+. Даже вы можете применить старое поведение привязок предзаполнения, когда создается экземпляр контроллера, выполняя

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

Но делать это выше очень мешает команда Angular.

В соответствии с 1.6.0 критическими изменениями вы должны переместить свой код в $onInit крюк решит вашу проблему.

ctrl.$onInit = function() {
 ctrl.people.data.forEach(function(person){
    person.account_types.forEach(function(account){
       ctrl.acctTally.push(account.name);
    })
 });
}
Другие вопросы по тегам