如何保持md-datepicker(angular material 2.0.0)不要关闭

时间:2017-08-04 11:19:56

标签: angular datepicker angular-material2

用户可以点击图标打开选择器,我可以picker.open()打开它。但是,它会在我做任何事情时立即关闭(选择一天,点击其他地方等)。有办法让它保持开放吗?

我读到在angularjs material1中不可能。现在有可能吗?

2 个答案:

答案 0 :(得分:1)

虽然不是推荐的解决方案,但您可以这样做:

<md-input-container>
  <input mdInput [mdDatepicker]="picker" placeholder="Choose a date">
  <button mdSuffix [mdDatepickerToggle]="picker" (click)="pickerOpened()"></button>
</md-input-container>
<md-datepicker #picker></md-datepicker>

@ViewChild(MdDatepicker) datepicker

pickerOpened() {
  setTimeout(() => this.datepicker.opened = false);
}

https://plnkr.co/edit/eAr7oQC0gqZAsjb3k7Sp?p=preview

答案 1 :(得分:-3)

查看

<div ng-app="MyApp" ng-controller="MyController" layout-padding>
    {{ date }}<br /> 
    <input type="date" ng-model="date" ng-click="openDatePicker()" ng-show="!datePickerOpened">
    <md-calendar class="fixed-calendar" ng-show="datePickerOpened" ng-model="date"></md-calendar>
</div>

CSS

.fixed-calendar {
  width: 340px;
  height: 340px;
  display: block;
}

.fixed-calendar .md-calendar-scroll-mask {
  width: 340px !important;
}

.fixed-calendar .md-virtual-repeat-scroller {
  width: 340px !important;
  height: 308px;
}

应用

Angular
    .module('MyApp', ['ngMaterial'])
    .controller('MyController', function($scope, $timeout) {

    //Init
    $scope.datePickerOpened = false;
    $scope.date = new Date();

    //show datepicker action
    $scope.openDatePicker = function () {

        //show datepicker
        $scope.datePickerOpened = true

        //avoid date set to 1933 by async reinit date after ng-show rendering
        $timeout(function () {
             $scope.date = new Date();
        });
    }
});