У меня есть 2 директивы. В DirectiveA
я получаю некоторые данные с удаленного сервера, а затем создаю шаблон с этими данными как тег anchor
. Теперь, когда пользователь нажимает на любую ссылку, я broadcast
событие и слушаю это событие в DirectiveB
. В DirectiveB я хочу сделать еще один запрос ajax, и когда я получаю ответ с данными, я хочу отобразить шаблон DirectiveB
. Мой текущий подход не работает, потому что он выполняет обе директивы в начале и в то время у меня нет данных для DirectiveB
. Ниже приведен код
DirectiveA
angular.module('app').directive('DirectiveA', function ($http) {
'use strict';
return {
restrict: 'E',
templateUrl: '/templates/templateA.html',
controller: function ($scope) {
$scope.showDetails = function (num) { // <-- this executes in ng-click in template
$scope.$broadcast('season', num);
};
},
link: function (scope, element, attributes) {
$http.get(attributes.resource).then(function (response) {
scope.rows = response.data;
scope.seasons = [];
for (var i = 0; i < scope.rows.length; i++) {
var num = parseInt(scope.rows[i].data);
if (year >= 2005 && year <= 2015) {
scope.seasons.push({ 'data': scope.rows[i].data });
}
}
});
}
};
});
Вот директиваB
angular.module('app').directive('DirectiveB', function() {
return {
restrict: 'E',
templateUrl: 'templates/templateB.html',
controller: function($scope, $http) {
$scope.$on('season', function ($scope, num) { // I listen to that event
$http.get('http://demo.com/api/' + num).then(function (response) {
$scope.standings = response.data;
});
});
}
};
});
UPDATE
Вот как я использую его в HTML
<directive-a resource="http://demo.com/api/>
</directive-a>
<directive-b></directive-b>
UPDATE
Я все еще жду его решения.
ОБНОВЛЕНИЕ 3
templateA
<ul>
<li ng-repeat="row in seasons">
<a href="#" ng-click="showDetails(row.season)">{{ row.season }}</a>
</li>
</ul>
Шаблон B
<h3>Standings</h3>
<table>
<thead>
<th ng-repeat="standing in standings" ng-if="state">{{ position }}</th>
</thead>
<tbody>
<tr ng-repeat="row in standings">
{{ row.Driver }}
</tr>
</tbody>
</table>