У меня возникла ситуация, когда я хотел бы $broadcast
из функции связывания директивы, где эта директива имеет изолированную область видимости. К сожалению, так как директива scope
не образцово, унаследованные от родительского $scope
вещания внутри изолированного объема невозможно, - reference.Невозможно транслировать из изолированной области в директивно-негативные последствия установки области действия в false?
Я знаю, что с помощью scope: false
на моей директиве заставит директиву использовать рамки из его родителей, потенциально скученности родительская область и приводящие к возможным коллизии именования и т. д., что делает директиву менее надежной для повторного использования.
Так что, может быть, я могу быть осторожным в том, чтобы заполнить родительскую область. Существуют ли другие причины, по которым я, возможно, не хочу использовать scope: false
в директиве, предназначенной для повторного использования? - Это просто предпочтения и «аккуратность» или существуют ли другие негативные последствия?
Насколько я знаю, нет альтернативы для получения функциональности, которая достигается при трансляции изнутри функции связывания директивы, отличной от того, может быть, изменение директивы изменяет сервис (что невозможно в моей ситуации из-за родительская иерархия) - насколько я могу судить, использование $broadcast
- единственный способ. Любое направление приветствуется.
Спасибо!
EDIT: Чтобы было ясно, мое намерение состоит в том, чтобы транслировать внутри изолированного объема, вниз детям родительской области, то есть
JS
.controller('parent', function ($scope) {
$scope.parent = 'parentProperty';
})
.directive('isolate', function() {
return {
scope: {},
template: '<div ng-click="click()">Click</div>',
link: function (scope) {
scope.click = function() {
console.log('clicked,but no broadcast');
scope.$broadcast('event', 'string');
}
}
};
})
.directive('child', function() {
return {
link: function(scope) {
scope.$on('event', function (e, event) {
console.log(event);
});
}
};
});
HTML
<body ng-controller="parent">
<div isolate>Click me to broadcast
</div>
<div child>
</div>
</body>
PLNKR : http://plnkr.co/edit/wKDOP4UpdgDFrHvzY0UN?p=preview
Я хочу сказать, что если вы хотите, чтобы родительская область «слышала» событие, вам нужно использовать '$ emit()', а не '$ broadcast()'. –
Gotcha. Таким образом, область выделения действует как дочерний элемент в родительскую область, и поэтому она может только '' 'emit''' вверх? - То есть, он никогда не сможет «' $ передавать »до детей родительской области? В этом случае область должна быть установлена в '' 'false''' - если вы хотите' '' $ broadcast'''. –
'$ broadcast' и' $ emit' делают то же самое: они отправляют ваше событие. По соображениям производительности (?) Вы отправляете события UP в родительские области (с использованием $ emit) или DOWN в дочерние области (используя $ broadcast). Поскольку вы хотите отправить что-то из области изоляции в родительскую область, вам нужно использовать $ emit. –