gpt4 book ai didi

javascript - 在 Angular UI Bootstrap 日期选择器中附加工作日标签的点击事件

转载 作者:行者123 更新时间:2023-11-27 23:51:21 26 4
gpt4 key购买 nike

我正在使用Angular UI Bootstrap带有 gm.datepickerMultiSelect 的日期选择器扩展名,我想让工作日标签可点击,以便我可以选择该月中的所有日期(如所有星期三)。我可以获取/计算同一工作日的所有日期并将它们添加到选定的日期范围,但由于我对 AngularJS 和 Bootstrap UI 相当陌生,我找不到触发标签单击事件的正确方法。

最佳答案

Angular UI Bootstrap 允许您覆盖其指令的模板。您可以通过将其放入 <script> 来创建自己的模板。类型为 text/ng-template 的标签.

所以我们复制 Angular UI 的 template/datepicker/day.html 的内容我们稍微改变一下它来调用一个新函数 selectWeekday在我们的工作日ng-click :

<script type="text/ng-template" id="template/datepicker/day.html">
<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">
<thead>
<tr>
<th>
<button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button>
</th>
<th colspan="{{::5 + showWeeks}}">
<button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button>
</th>
<th>
<button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button>
</th>
</tr>
<tr>
<th ng-if="showWeeks" class="text-center"></th>
<!-- Added ng-click and style -->
<th ng-click="selectWeekday(label)" style="cursor:pointer;" ng-repeat="label in ::labels track by $index" class="text-center"><small aria-label="{{::label.full}}">{{::label.abbr}}</small></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rows track by $index">
<td ng-if="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>
<td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">
<button type="button" style="min-width:100%;" class="btn btn-default btn-sm" ng-class="{'btn-info': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{'text-muted': dt.secondary, 'text-info': dt.current}">{{::dt.label}}</span></button>
</td>
</tr>
</tbody>
</table>
</script>

注意:此脚本标记必须位于您的 ng-app 内否则它将被忽略并且不会覆盖原始模板。

现在我们需要修改 datepicker指令 AngularJS decorators添加selectWeekday功能:

angular.module('myApp', [
'ui.bootstrap',
'gm.datepickerMultiSelect'
])
.config(function($provide) {
$provide.decorator('datepickerDirective', function($delegate) {
var directive = $delegate[0];
//get a copy of the directive's original compile function
var directiveCompile = directive.compile;

//overwrite the original compile function
directive.compile = function(tElement, tAttrs) {
// call the directive's compile with apply to send the original 'this' and arguments to it
var link = directiveCompile.apply(this, arguments);

//here's where the magic starts
return function(scope, element, attrs, ctrls) {
//call the original link
link.apply(this, arguments);

scope.selectWeekday = function(label) {
scope.$emit('datepicker.selectWeekday', label);
};

};
};

return $delegate;
});
})

并从 Controller 收听 datepicker.selectWeekday :

.controller('DateController', function($scope) {

$scope.$on('datepicker.selectWeekday', function(event, newVal) {
$scope.selectedWeekday = newVal;
});

});

从这里您可以添加逻辑以根据已知的选定工作日选择日期!

这是一个有效的 plunkr:http://plnkr.co/edit/Ef4gd7SUYMcG05PuvqFh?p=preview

关于javascript - 在 Angular UI Bootstrap 日期选择器中附加工作日标签的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32676310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com