【发布时间】:2017-02-05 06:59:18
【问题描述】:
我正在尝试使用bootstrap-datepicker。 我有一个现有的 AngularJS 指令,但是在设置初始值时,在使用日期范围时它不会更新。
HTML
<div class="input-group input-daterange" id="fromToDate" calendar ng-model="vm.fromToDate">
<input type="text" class="form-control input-sm" required ng-model="vm.bookingFromDate">
<span class="input-group-addon">to</span>
<input type="text" class="form-control input-sm" required ng-model="vm.bookingToDate">
</div>
指令
// this directive updates the value, once it has been selected, but not when the initial value has been set**
function calendar() {
return {
require: 'ngModel',
link: function($scope, el, attr, ngModel) {
$(el)
.datepicker({
autoclose: true,
todayHighlight: true,
todayBtn: 'linked',
onSelect: function(dateText) {
$scope.$apply(function() {
ngModel.$setViewValue(dateText);
});
}
});
}
};
};
然后,我尝试了以下指令(找到 here),但这也不适用于日期范围 - 相反:
function calendar() {
return {
require: '?ngModel',
restrict: 'A',
link: function ($scope, element, attrs, controller) {
var updateModel, onblur;
if (controller != null) {
updateModel = function (event) {
element.datepicker('hide');
element.blur();
};
onblur = function () {
var date = element.val();
return $scope.$apply(function () {
return controller.$setViewValue(date);
});
};
controller.$render = function() {
var date = controller.$viewValue;
element.datepicker().data().datepicker.date = date.from.toDate();
element.datepicker('setValue');
element.datepicker('update');
return controller.$viewValue;
};
}
return attrs.$observe('bdatepicker', function (value) {
var options = {
format: "yyyy/mm/dd",
todayBtn: "linked",
autoclose: true,
todayHighlight: true
};
return element.datepicker(options).on('changeDate', updateModel).on('blur', onblur);
});
}
};
};
任何帮助将不胜感激! 谢谢!
[更新]
CodePen 说明问题:
<p data-height="322" data-theme-id="dark" data-slug-hash="BLkagb" data-default-tab="js,result" data-user="Programm3r" data-embed-version="2" class="codepen">See the Pen <a href="http://codepen.io/Programm3r/pen/BLkagb">Bootstrap-Datepicker (Range) AngularJS</a> by Richard (<a href="http://codepen.io/Programm3r">@Programm3r</a>) on <a href="http://codepen.io">CodePen</a>.</p>
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>
【问题讨论】:
-
有什么错误吗?你能提供任何有效的 JSFIDDLE 吗?
-
@Pradeepb 没有错误,它基本上设置了输入值,但同时破坏了日期选择器。选择器弹出窗口在初始设置后不再显示。我会做一个小提琴......完成后会更新问题。感谢您的回复!
-
好的。你如何设置初始值?你可以用这个JSFIDDLE来修改。
-
我正在使用 angularjs 设置值。因为 ng-model 绑定到控制器中的变量
-
@Pradeepb 添加了 codepen 和链接
标签: javascript jquery angularjs twitter-bootstrap datepicker