у меня есть простой контроллер родительский/дочерний набор следующим образом:AngularJS: Как обновить сферу директивы от дочерних контроллеров
<body ng-controller="ParentCtrl">
<section my-directive></section>
<div ng-controller="Child1Ctrl">
<button ng-click="child1()">Click Child1</button>
</div>
<br>
<div ng-controller="Child2Ctrl">
<button ng-click="child2()">Click Child2</button>
</div>
</body>
Когда я нажимаю на любой кнопке, от ребенка Ctrl ИЛИ Ребенок Ctrl, я хочу, чтобы области в моей директиве обновлялись.
myDirective.js
app.directive('myDirective', function() {
var slider = {
initial : function() {
slider.clear();
$scope.slideHide = false;
$scope.slideShow = false;
},
clear: function() {
$scope.slideMessage = '';
$scope.slideError = false;
$scope.slideSuccess = false;
},
error: function(message) {
$scope.slideShow = true;
$scope.slideError = true;
$scope.slideMessage = message;
},
success: function(message) {
$scope.slideShow = true;
$scope.slideSuccess = true;
$scope.slideMessage = message;
}
}
return {
restrict: 'A',
replace: true,
transclude: true,
template: '<section class="slide">' +
'<div data-ng-class="{\'slide-show\' : slideShow, \'slide-error\' : slideError, \'slide-success\' : slideSuccess, \'slide-hide\' : slideHide}">' +
'<p>{{ slideMessage }}</p>' +
'</div>' +
'</section>'
}
}
);
И называют в моих детских контроллеров:
app.controller('Child1Ctrl', function($scope) {
$scope.child1 = function() {
$scope.$parent.slider.initialise();
}
});
app.controller('Child2Ctrl', function($scope) {
$scope.child2 = function() {
$scope.$parent.slider.success('Display some text');
}
});
Обновление с скрипкой:
http://jsfiddle.net/6uub3jqx/1/
Если вы нажмете на первый набор кнопок, появится красная/зеленая лента.
Если вы нажмете на кнопки с контроллерами child1/2, никаких действий не будет.
Решение:
См скрипка: http://jsfiddle.net/6uub3jqx/2/
По существу ребенок должен отправить:
$scope.successChild1 = function(msg) {
$scope.$emit('successCh1', 'Some data');
};
И родитель должен получить:
$scope.$on('successCh1', function (event, data) {
$scope.$broadcast('success', data);
});
Будет ли корнеплод лучше альтернативой?
@pixelbits - спасибо за информацию, можете ли вы привести пример? –
@pixelbits Что значит? «Разговор дешевый, дай мне код». – Vidul
@ CPH4 - в чем преимущество вашего комментария выше? –