【问题标题】:Update bindings when element is updated outside angular当元素在角度之外更新时更新绑定
【发布时间】:2021-05-12 18:03:56
【问题描述】:

我有一个如下的日期选择器:

<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>

...我正在使用daterangepicker 库。即使用户单击了input 并导航离开,我也需要允许日期为空。所以我在设置中使用了autoUpdateInput = false,如下图

$('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('');
});

但问题是,$scope.dtDateOfBirth 在用户选择日期时不会更新。我如何告诉angularjs 变量需要更新?

【问题讨论】:

    标签: jquery angularjs daterangepicker


    【解决方案1】:

    您需要使用directive。因为没有为 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>

    【讨论】:

    • 我在选择日期时收到modelSetter is not a function$scope.$apply() 部分中的 modelSetter() 函数失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2018-12-11
    • 2023-04-03
    • 2014-09-21
    • 1970-01-01
    • 2014-02-26
    • 2018-10-24
    相关资源
    最近更新 更多