如何防止按钮单击折叠窗格
How to prevent button click from collapsing pane
我有一个 ui-bootstrap 窗格(header 和 body),在 header 上有一个按钮。单击 header 区域应该会折叠 body。单击该按钮应该只会激活一个警报弹出窗口。不幸的是,单击该按钮也会折叠窗格。我怀疑按钮后面的窗格以某种方式捕获了点击。我怎样才能避免这种情况?
这是傻瓜:
http://plnkr.co/edit/teCnC7KtvlQtosZurlqD?p=preview
<div class="panel panel-primary">
<div class="panel-heading" ng-click="vm.onClickHeader()">
<span ng-hide="vm.collapsed" style="padding-top: 8px">
<span ng-click="vm.onClickBtn()"><i class="fa fa-chevron-left fa-2x"></i></span>
</span>
</div>
<div class="panel-body" ng-hide="vm.collapsed" style="padding: 2px; padding-right: 4px">
<div>Click the button above to hide me!</div>
</div>
</div>
var app = angular.module('app');
app.directive('myPanel', MyPanel);
function MyPanel() {
return {
templateUrl: 'my-panel.html',
restrict: 'E',
controller: MyController,
controllerAs: 'vm',
scope: true
};
};
function MyController() {
this.collapsed = false;
this.onClickBtn = function onClickBtn() {
alert('click!')
};
this.onClickHeader = function(evt) {
this.collapsed = !this.collapsed;
}
}
问题是点击事件从 <span>
向上传播 DOM。您可以将 $event.stopPropagation()
添加到 ng-click
指令。 (有些人不喜欢这样,因为他们觉得将这样的代码添加到指令中是 "dirty",因此您始终可以将 $event
作为参数传递给 vm.onClickBtn()
并调用 .stopPropagation()
在你的控制器中。)
<span ng-click="vm.onClickBtn(); $event.stopPropagation();"><i class="fa fa-chevron-left fa-2x"></i></span>
在内部 ng-click
上,只需在 $event 对象上调用 stopPropagation
来停止事件冒泡。
<span ng-click="vm.onClickBtn();$event.stopPropagation()">
<i class="fa fa-chevron-left fa-2x"></i>
</span>
我有一个 ui-bootstrap 窗格(header 和 body),在 header 上有一个按钮。单击 header 区域应该会折叠 body。单击该按钮应该只会激活一个警报弹出窗口。不幸的是,单击该按钮也会折叠窗格。我怀疑按钮后面的窗格以某种方式捕获了点击。我怎样才能避免这种情况?
这是傻瓜: http://plnkr.co/edit/teCnC7KtvlQtosZurlqD?p=preview
<div class="panel panel-primary">
<div class="panel-heading" ng-click="vm.onClickHeader()">
<span ng-hide="vm.collapsed" style="padding-top: 8px">
<span ng-click="vm.onClickBtn()"><i class="fa fa-chevron-left fa-2x"></i></span>
</span>
</div>
<div class="panel-body" ng-hide="vm.collapsed" style="padding: 2px; padding-right: 4px">
<div>Click the button above to hide me!</div>
</div>
</div>
var app = angular.module('app');
app.directive('myPanel', MyPanel);
function MyPanel() {
return {
templateUrl: 'my-panel.html',
restrict: 'E',
controller: MyController,
controllerAs: 'vm',
scope: true
};
};
function MyController() {
this.collapsed = false;
this.onClickBtn = function onClickBtn() {
alert('click!')
};
this.onClickHeader = function(evt) {
this.collapsed = !this.collapsed;
}
}
问题是点击事件从 <span>
向上传播 DOM。您可以将 $event.stopPropagation()
添加到 ng-click
指令。 (有些人不喜欢这样,因为他们觉得将这样的代码添加到指令中是 "dirty",因此您始终可以将 $event
作为参数传递给 vm.onClickBtn()
并调用 .stopPropagation()
在你的控制器中。)
<span ng-click="vm.onClickBtn(); $event.stopPropagation();"><i class="fa fa-chevron-left fa-2x"></i></span>
在内部 ng-click
上,只需在 $event 对象上调用 stopPropagation
来停止事件冒泡。
<span ng-click="vm.onClickBtn();$event.stopPropagation()">
<i class="fa fa-chevron-left fa-2x"></i>
</span>