如果它是 $scope 变量,则 ng-model-options 被忽略

ng-model-options ignored if it's a $scope variable

我目前正在使用 AngularJS Bootstrap 日期选择器(也称为 uib-datepicker)。我目前正在尝试在其上设置 UTC 偏移量,这可以通过同样设置 ngModelOptions 来完成:ng-model-options="{timezone: '+02:00'}" 效果很好。但是,如果我将 ngModelOptions 设置为 $scope 变量,则不会对时区进行更改。所以,要清楚,这有效:

                    <input uib-datepicker-popup="{{picker.format}}"
                       ng-model="picker._value"
                       is-open="picker.opened"
                       datepicker-options="picker.options"
                       ng-model-options="{timezone: '+02:00'}"
                       close-text="{{'close' | translate}}"
                       clear-text="{{'clear' | translate}}"
                       current-text="{{'current' | translate}}"/>

但事实并非如此:

                    <input uib-datepicker-popup="{{picker.format}}"
                       ng-model="picker._value"
                       is-open="picker.opened"
                       datepicker-options="picker.options"
                       ng-model-options="ngModelOptions"
                       close-text="{{'close' | translate}}"
                       clear-text="{{'clear' | translate}}"
                       current-text="{{'current' | translate}}"/>

即使“$scope.ngModelOptions”变量拥有完全相同的值“{timezone: '+02:00'}”

我正在使用 angular-ui-bootstrap 2.5.6,以及 angularjs 1.6.9

好吧,我很快找到了答案:ngModelOptions 实际上必须在日期选择器的 "options" 对象中设置,如下所示:

  const datePickerOptions = {
    opened: false,
    format: 'shortDate',
    options: {
      startingDay: $moment().startOf('week').isoWeekday(),
      minDate: null,
      maxDate: null,
      showWeeks: false,
      ngModelOptions: {
        timezone: '+02:00'
      }
    }
  };

在 bootstrap 文档 (https://angular-ui.github.io/bootstrap) 中,它说 ng-model-options 是 uib-datepicker 输入中受支持的 angular 选项,但不知何故它不t 使用范围变量,所以只需在日期选择器选项中设置它。