我在AngularJS项目的Date From和Date To字段上使用JQuery
UI的Datepicker。我添加了将值绑定到模型值的指令,还添加了对OnSelect的检查,该检查为每个字段设置minDate和maxDate选项(因此Date
To永远不会早于Date
From)。问题在于,在加载页面时,实际上没有选择任何日期(即使模型具有值),因此仍然可以选择早于“日期自”的“到”日期。我添加了$
watch服务以至少纠正该错误,但是我仍然不知道如何在指令内或控制器内在加载时设置minDate。我也在Angular代码之外尝试了$(document).ready,但这也不起作用。这是添加任何内容设置minDate之前的代码。
在控制器内:
$scope.messagesForm.dateFrom = moment().subtract('days', 30).format('MM/DD/YYYY');
$scope.messagesForm.dateTo = moment().format('MM/DD/YYYY');
$scope.$watch('messagesForm.dateTo', function(newVal, oldVal) {
if (!newVal) return;
if (Date.parse(newVal) < Date.parse($scope.messagesForm.dateFrom)) {
$scope.messagesForm.dateFrom = newVal;
}
});
指示:
.directive('datepicker', function() {
return {
restrict: 'A',
require : 'ngModel',
link : function (scope, element, attrs, ngModelCtrl) {
$(function(){
element.datepicker({
dateFormat: 'mm/dd/yy',
showStatus: true,
showWeeks: true,
highlightWeek: true,
maxDate: 0,
numberOfMonths: 1,
showAnim: "scale",
showOptions: { origin: ["bottom", "right"] },
onSelect: function (date) {
if (this.id === "MessageDateFrom") {
$("#MessageDateTo").datepicker("option", "minDate", date);
} else if (this.id === "MessageDateTo") {
$("#MessageDateFrom").datepicker("option", "maxDate", date);
}
ngModelCtrl.$setViewValue(date);
scope.$apply();
}
});
});
}
}
});
HTML:
<div class="form-group">
<input type="text" id="MessageDateFrom" class="form-control dates" ng-model="messagesForm.dateFrom" datepicker readonly="readonly" />
</div>
<div class="form-group">
<input type="text" id="MessageDateTo" class="form-control dates" ng-model="messagesForm.dateTo" datepicker readonly="readonly" />
</div>
我尝试失败的JQuery:
$(document).ready(function() {
$("MessageDateTo").datepicker("option","minDate",$("MessageDateFrom").val());
};
有任何想法吗?
谢谢!
无需担心控制器加载的时间或仅添加这两个属性
minDate
和
maxDate的
限制,例如minDate:"-30d",maxDate: 0,
您还可以从指令属性动态放置minDate和maxDate值。
指示
app.directive('datepicker', function() {
return {
restrict: 'A',
require : 'ngModel',
link : function (scope, element, attrs, ngModelCtrl) {
$(function(){
element.datepicker({
dateFormat: 'mm/dd/yy',
showStatus: true,
showWeeks: true,
highlightWeek: true,
minDate:"-30d", //here i did logic -30d
maxDate: 0, //today is max date
numberOfMonths: 1,
showAnim: "scale",
showOptions: { origin: ["bottom", "right"] },
onSelect: function (date) {
ngModelCtrl.$setViewValue(date);
scope.$apply();
}
});
});
}
}
});
工作朋克
更新资料
抱歉,我的错误假设是,如果您真的很在意何时加载数据或在那个时候分配日期变量jquery ui datepicker
应该绑定到它们,那么我attrs.$observe
将更喜欢使用在评估属性表达式时将调用的方法。为了使其正常工作,我确实在页面上添加了一个属性名称loaded="{{messagesForm.dateFrom}}"
&loaded="{{messagesForm.dateTo}}"
,因此,每当将值分配给dateFrom和dateTo时,相应的datepicker都会分配给它们的元素
指示
app.directive('datepicker', function() {
return {
restrict: 'A',
require : 'ngModel',
link : function (scope, element, attrs, ngModelCtrl) {
//get called when `{{}}` value evaluated
attrs.$observe('loaded',function(val){
element.datepicker({
dateFormat: 'mm/dd/yy',
showStatus: true,
showWeeks: true,
highlightWeek: true,
maxDate: 0,
numberOfMonths: 1,
showAnim: "scale",
showOptions: { origin: ["bottom", "right"] },
onSelect: function (date) {
if (this.id === "MessageDateFrom") {
$("#MessageDateTo").datepicker("option", "minDate", date);
} else if (this.id === "MessageDateTo") {
$("#MessageDateFrom").datepicker("option", "maxDate", date);
}
ngModelCtrl.$setViewValue(date);
scope.$apply();
}
});
})
}
}
});
更新了Plunkr,
并在5秒钟后演示了范围变量的设置值。
希望这可以对您有所帮助,谢谢。
我想更改页面加载时的“选择组件”值。我读了相关的帖子,那里提出的每一个解决方案都适用于点击按钮。然而,我想要的是在页面加载后设置值,而不需要任何用户操作。我拥有的是: 以及: 我有相同的代码附加到按钮上,并且它可以工作。它只是不适用于准备()函数。所以我的问题是:如何在页面加载后设置选择值? 完整html
因此,当我尝试使用FragmentStatePagerAdapter和Loader API但UI中没有设置值时,我的意思是当完成onLoadFinished()并将TextView、ImageView和changeCursor的值设置到我的适配器时,它并不反映它,我看到的是我在XML中设置的UI。 让我们看看我能不能把这个问题解释清楚。 我有一个列表,当一个项目是点击将得到一个详细的视图。当一个项
你能帮我找出配置中缺少的步骤吗? 我正试图将logger添加到我非常简单的web应用程序中:为了做到这一点,我使用了log4j2 (beta9)。 我写下了我的<code>log4j2.xml<code>如下 我把它放在WEB-INF文件夹里。 然后,我有一个简单的servlet,它执行以下操作 正如你所看到的,这只是一个尝试,看看是否如预期的那样工作,但它没有。通过阅读此处的web app,我不
当帧加载时,如何在日期选择器上显示焦点? 如何验证用户只能输入日期格式的文本字段和 如何在Swing中将焦点设置在jdatechooser图标上。 代码 private void jFormattedTextField1KeyPressed(java.awt.event.KeyEvent evt){ //TODO在此处添加处理代码:
问题内容: 我想使用安装json2csv,但收到此错误: 有关如何在MacOS上解决此问题的任何帮助? 问题答案: [更新:从Go 1.8开始,默认为,但是如果您想了解布局,自定义布局等,可能仍会觉得有用。] 官方的Go网站讨论了GOPATH以及如何布置工作空间目录。 -在您的Shell中运行它,然后将其添加到或等效版本中,以便将来为您设置。Go会在安装包,以及,子目录那里。您需要将自己的软件包放
问题内容: 我尝试使用下面的代码将命令输出存储在数组中,但是在“ while循环”之后无法打印数组元素,这意味着在代码的最后一行中,我的代码是否存在任何问题? 问题答案: 问题是您在 子 外壳中添加了元素。详细说明: 导致在子shell中执行,这是一个单独的执行环境。这意味着设置的变量不适用于 当前 外壳,其执行环境不会受到影响。您可以改为使用流程替代来实现相同目的: 请注意,不建议解析。尝试使用