Mic*_*ell 5 javascript datepicker angularjs angular-ui-bootstrap
我正在使用角度datepicker:
http://angular-ui.github.io/bootstrap/#/datepicker
目前它被硬编码显示42天或6周.
我想知道如何在ui-bootstrap-0.13.1.js中覆盖(即角度装饰器)这个函数来显示4周.
这是功能:
ctrl._refreshView = function() {
var year = ctrl.activeDate.getFullYear(),
month = ctrl.activeDate.getMonth(),
firstDayOfMonth = new Date(year, month, 1),
difference = ctrl.startingDay - firstDayOfMonth.getDay(),
numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference,
firstDate = new Date(firstDayOfMonth);
if (numDisplayedFromPreviousMonth > 0) {
firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
}
// 42 is the number of days on a six-month calendar
var days = getDates(firstDate, 42);
for (var i = 0; i < 42; i++) {
days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {
secondary: days[i].getMonth() !== month,
uid: scope.uniqueId + '-' + i
});
}
scope.labels = new Array(7);
for (var j = 0; j < 7; j++) {
scope.labels[j] = {
abbr: dateFilter(days[j].date, ctrl.formatDayHeader),
full: dateFilter(days[j].date, 'EEEE')
};
}
scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);
scope.rows = ctrl.split(days, 7);
if (scope.showWeeks) {
scope.weekNumbers = [];
var thursdayIndex = (4 + 7 - ctrl.startingDay) % 7,
numWeeks = scope.rows.length;
for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
scope.weekNumbers.push(
getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
}
}
};Run Code Online (Sandbox Code Playgroud)
我已经尝试将42天硬编码到更小的东西,但它打破了日历计算.只是看看有没有人延长过这个?
干杯
如果使用装饰器,您应该能够 _refreshView包装旧链接函数的新编译函数。在你的ctrl._refreshView包装器中,你可以执行以下操作:
directive.compile = function() {
return function(scope, element, attrs, ctrl) {
link.apply(this, arguments);
var _refreshView = ctrl._refreshView;
ctrl._refreshView = function() {
_refreshView.apply(this, arguments);
removeAnySecondaryOnlyRows(scope.rows);
};
removeAnySecondaryOnlyRows(scope.rows);
};
};
Run Code Online (Sandbox Code Playgroud)
和:
//Remove any rows that contain only 'secondary' dates (those from other months)
function removeAnySecondaryOnlyRows(rows) {
for (var i = 0; i < rows.length; i++) {
var row = rows[i],
areAllSecondary = false;
//check the first and the last cell's .secondary property
areAllSecondary = row[0].secondary && row[(row.length - 1)].secondary;
if (areAllSecondary) {
rows.splice(i, 1);
i--;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都作为一个功能片段,包括自定义模板和一些用于隐藏“次要”日期(来自不同月份的日期)的CSS:
directive.compile = function() {
return function(scope, element, attrs, ctrl) {
link.apply(this, arguments);
var _refreshView = ctrl._refreshView;
ctrl._refreshView = function() {
_refreshView.apply(this, arguments);
removeAnySecondaryOnlyRows(scope.rows);
};
removeAnySecondaryOnlyRows(scope.rows);
};
};
Run Code Online (Sandbox Code Playgroud)
//Remove any rows that contain only 'secondary' dates (those from other months)
function removeAnySecondaryOnlyRows(rows) {
for (var i = 0; i < rows.length; i++) {
var row = rows[i],
areAllSecondary = false;
//check the first and the last cell's .secondary property
areAllSecondary = row[0].secondary && row[(row.length - 1)].secondary;
if (areAllSecondary) {
rows.splice(i, 1);
i--;
}
}
}
Run Code Online (Sandbox Code Playgroud)
(function() {
"use strict";
angular.module('myApp', ['ui.bootstrap'])
.config(['$provide', Decorate])
.controller("MainController", ['$scope', MainController]);
function Decorate($provide) {
//fix for Datepicker 'day mode' to show only rows with days from the current month
$provide.decorator('daypickerDirective', ['$delegate', daypickerDirectiveDecorator]);
function daypickerDirectiveDecorator($delegate) {
var directive = $delegate[0],
link = directive.link;
// custom html template:
directive.templateUrl = "common/directives/uiBootstrapDatepickerDay.tpl.html";
directive.compile = function() {
return function(scope, element, attrs, ctrl) {
link.apply(this, arguments);
var _refreshView = ctrl._refreshView;
ctrl._refreshView = function() {
_refreshView.apply(this, arguments);
removeAnySecondaryOnlyRows(scope.rows);
};
removeAnySecondaryOnlyRows(scope.rows);
};
};
return $delegate;
}
//Remove any rows that contain only 'secondary' dates (those from other months)
function removeAnySecondaryOnlyRows(rows) {
for (var i = 0; i < rows.length; i++) {
var row = rows[i],
areAllSecondary = false;
//check the first and the last cell's .secondary property
areAllSecondary = row[0].secondary && row[(row.length - 1)].secondary;
if (areAllSecondary) {
rows.splice(i, 1);
i--;
}
}
}
}
function MainController($scope) {
$scope.dt = new Date();
}
})();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1841 次 |
| 最近记录: |