jquery - Update bindings when element is updated outside angular
问题描述
I have a date picker as follows:
<div class="form-group col-md-6">
<label for="dob" class="col-form-label">Date of Birth:</label>
<input type="text" name="daterangepicker" id="dob" class="form-control form-control-sm"
ng-model="dtDateOfBirth" autocomplete="off">
<button class="btn btn-outline-primary" ng-click="age()">Age</button>
</div>
... and I am using the daterangepicker library. I need to allow the date to be empty even when the user has clicked the input
and navigated away. So I used the autoUpdateInput = false
in the settings as shown below
$('input[name="daterangepicker"]').daterangepicker({
singleDatePicker: true,
showDropdowns: true,
autoUpdateInput: false,
locale: {
format: 'DD-MMM-YYYY',
cancelLabel: 'Clear'
}
});
$('input[name="daterangepicker"]').on('apply.daterangepicker', function(ev, picker) {
$(this).val(picker.startDate.format('DD-MMM-YYYY'));
});
$('input[name="daterangepicker"]').on('cancel.daterangepicker', function(ev, picker) {
$(this).val('');
});
But the issue is, the $scope.dtDateOfBirth
is not updated when the user selects a date. How do I tell angularjs
that the variable needs to be updated?
解决方案
你需要使用指令。因为没有为 jquery 回调更新模型。
app.directive("daterangepicker", function ($parse) {
return {
restrict: "A",
link: function (scope, elem, attrs, ngModelCtrl) {
elem.daterangepicker({
singleDatePicker: true,
showDropdowns: true,
autoUpdateInput: false,
locale: {
format: 'DD-MMM-YYYY',
cancelLabel: 'Clear'
}
});
elem.on('apply.daterangepicker', function (ev, picker) {
var model = $parse(attrs.daterangepicker);
var modelSetter = model.assign;
scope.$apply(function () {
modelSetter(scope, { startDate: picker.startDate.toDate(), endDate: picker.endDate.toDate() });
});
});
}
}
});
div class="form-group col-md-6">
<label for="dob" class="col-form-label">Date of Birth:</label>
<input type="text" name="daterangepicker" id="dob" class="form-control form-control-sm" daterangepicker="dtDateOfBirth"
ng-model="dtDateOfBirth" autocomplete="off">
<button class="btn btn-outline-primary" ng-click="age()">Age</button>
</div>
推荐阅读
- angular - Angular Typescript循环遍历对象数组以查找计数
- javascript - 如何为 p5.js 游戏创建“You Won”屏幕?
- php - 如何使用此分页码获取页面上的项目数?
- amazon-web-services - 在 SSM 中未选择 ECS 上的 EC2
- python - tkinter GUI中str和int之间的Python TypeError,但不是CLI
- java - 使用 SMBJ 将多部分文件写入远程服务器
- database - Docker 中的 Oracle 实例
- python - 我的位加法器的总和只在某些时候工作
- python - 检查值是否在区间内
- haskell - 如何根据列表的后半部分简洁匹配列表,并相应地绑定它的前半部分?