我有一个简单的ui-bootstrap模式,带有这样的模板:
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
ng-click="ok()">
OK
</button>
</div>
模态的默认行为是,如果我按下Escape,模态将被关闭。同样,如果按Enter键,我想要触发ok()方法。我该怎么做?
答案 0 :(得分:2)
感谢Diana R带领我回答这个问题:
我可以使用ng-enter指令,如下所述:https://gist.github.com/EpokK/5884263
这将允许我的模态听取输入键。但重点必须放在其工作的模式上。所以我也创建了一个我称之为焦点的指令:
angular.module('webApp').directive('focused', function ($timeout, $parse) {
return {
link: function ($scope, element, attributes) {
var model = $parse(attributes.focused);
$scope.$watch(model, function (value) {
if (value === true) {
$timeout(function () {
element[0].focus();
});
}
});
// set attribute value to 'false' on blur event:
element.bind('blur', function () {
if (model && model.assign) {
$scope.$apply(model.assign($scope, false));
}
});
}
};
});
然后我更新我的模态模板,使它看起来像这样:
<div ng-enter="ok()">
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
focused="true"
ng-click="ok()">
OK
</button>
</div>
</div>
因为聚焦=&#34;真&#34;使用ng-enter指令在包装div内部,enter键将触发ok()方法。
答案 1 :(得分:0)
如果您正在寻找更多“开箱即用”的解决方案,我建议您使用ng-focus-if。
功能强大得多,但在这里它可以用来聚焦所需的元素。只需标记确认按钮:
<div class="modal-footer">
<button class="btn btn-default" ng-click="$dismiss()">
Cancel
</button>
<button class="btn btn-primary" ng-click="$close()" focus-if>
OK
</button>
</div>
现在点击space
或enter
会触发确定按钮。您还可以使用tab
按钮进行导航。