Angular: 忽略自己发出的消息
Angular: ignore messages emitted by self
我有一个扩展和关闭 div 高度的指令。它被多次使用,所以当用户打开一个盒子时,我想关闭其他打开的盒子。我认为最好发出一个事件,但问题是该指令随后也会自行关闭,因此无法打开 div。
我可以忽略来自同一指令的消息吗?
angular.module('cinemaApp')
.directive('expand', function ($rootScope) {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
$rootScope.$on('contract', function(payload) {
element.css('height', attrs.fixedheight);
});
scope.$watch('open', function(value) {
element.css('height', (value ? 'auto' : attrs.fixedheight));
$rootScope.$emit('contract');
});
element.css('height', attrs.fixedheight);
}
};
});
当您发出事件时,您可以传递给侦听器的额外参数。所以你可以发出像
$rootScope.$emit('contract', element);
喜欢听
$rootScope.$on('contract', function(event, target) {
if (target != element)
element.css('height', attrs.fixedheight);
});
我有一个扩展和关闭 div 高度的指令。它被多次使用,所以当用户打开一个盒子时,我想关闭其他打开的盒子。我认为最好发出一个事件,但问题是该指令随后也会自行关闭,因此无法打开 div。
我可以忽略来自同一指令的消息吗?
angular.module('cinemaApp')
.directive('expand', function ($rootScope) {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
$rootScope.$on('contract', function(payload) {
element.css('height', attrs.fixedheight);
});
scope.$watch('open', function(value) {
element.css('height', (value ? 'auto' : attrs.fixedheight));
$rootScope.$emit('contract');
});
element.css('height', attrs.fixedheight);
}
};
});
当您发出事件时,您可以传递给侦听器的额外参数。所以你可以发出像
$rootScope.$emit('contract', element);
喜欢听
$rootScope.$on('contract', function(event, target) {
if (target != element)
element.css('height', attrs.fixedheight);
});