Компоненты, связывающие в 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);
})
});
}