У меня есть контроллер, который имеет ряд $ rootScope. $ Broadcast, которые обновляют содержимое директивы.
Первый $ rootScope. $ Broadcast очищает все содержимое/данные, а другой заполняет его.
app.controller('MyController', function($scope, header) {
$rootScope.$broadcast('clear');
$rootScope.$broadcast('title', header.title);
$rootScope.$broadcast('total', header.total);
});
Примечание: заголовок разрешен от моего $ stateProvider например:
.state('index', {
url: '/index',
templateUrl: 'home.html',
controller: 'MyController',
resolve: {
header: function() {
return {
title : 'Welcome to Home',
total : 6
};
}
}
})
директива:
app.directive('myDirective', function() {
return {
restrict: 'A',
replace: true,
scope: {},
link: function(scope, element, attrs) {
scope.$on("clear", function(event, val) {
scope.Title = '';
scope.Total = 0;
});
scope.$on("title", function(event, title) {
scope.Title = title;
});
scope.$on("total", function(event, total) {
scope.Total = total;
});
},
template:
'<section>' +
'<p>{{Title}} - {{Total}}</p>' +
'</section>'
}
});
Проблема, которую я имею, что на странице загрузки, в $ трансляции заголовка и, как представляется, вызывается, прежде чем ясность будет завершена.
UPDATE:
Plunker: http://plnkr.co/edit/o7wEFyIGh0284ZAc9VnS?p=preview
Всякий раз, когда на home.html, директива будет скрывать - правильно. Всякий раз, когда на cart.html, директива покажет - правильно.
Чтобы увидеть проблему, нажмите на корзину ... Нажмите кнопку, чтобы увеличить счетчик .. Затем вернитесь домой, а затем обратно в корзину ... счетчик не сбрасывается до 0
http://stackoverflow.com/questions/18130369/emit-broadcast-synchronous-or-asynchronous –
Итак, когда вы добавляете операторы console.log в три $ on, "clear" logs last? –
@camden_kid - см. Прилагаемый обновленный плункер и комментарии –