【问题标题】:Scroll to current date when opening md-calender打开 md-calendar 时滚动到当前日期
【发布时间】:2016-10-03 09:59:10
【问题描述】:

目前正在构建一个带有角度材料的应用程序,我们需要一个 md-calendar 组件。我们要自定义按钮样式和内容,因此不要使用普通的 md-datepicker。问题是当 md-calender 打开时,滚动位置在 1933 年。当前日期设置正确。

如何将滚动位置设置为当前日期?

md-datepicker 使用 md-calender 作为日历滚动到当前日期的子组件,因此应该不难实现。

当前的解决方法是将 md-min-date 属性设置为接近当前日期的日期,但这不是一个好的解决方案,因为它禁止导航到更早的日期。

代码笔示例: https://codepen.io/adam-wiman/pen/QKqRzd <md-calendar>

【问题讨论】:

    标签: javascript angularjs angular-material


    【解决方案1】:

    首先我尝试升级到最新的angular material v1.1.10,这是我在尝试回答这个SO Answer 时得到的解决方案,但是这样做并没有帮助解决你的问题,尽管你可以升级到最新的,如果你想消除一些错误。

    无论如何,问题是由于 md-datepicker 未正确初始化,可能有多种原因,我对您的问题的解决方案是使用良好的旧可信赖 ng-if 重新初始化 @987654327 @,这样做解决了这个问题。

    注意:使用ng-if会创建一个孤立的范围,因此$scope变量可能无法正确更新,在这些情况下,您需要使用$parent属性来解决它,参考here .

    angular.module('myApp',['ngMaterial']).controller('AppCtrl', function($scope) {
      $scope.myDate = new Date();
    
      $scope.minDate = new Date(
          $scope.myDate.getFullYear(),
          $scope.myDate.getMonth() - 2,
          $scope.myDate.getDate());
    
    });
    
    /*
    Copyright 2016 Google Inc. All Rights Reserved. 
    Use of this source code is governed by an MIT-style license that can be in foundin the LICENSE file at https://material.angularjs.org/license.
    */
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.1.10/angular-material.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.1.10/angular-material.min.css" rel="stylesheet"/>
    <body ng-app="myApp" ng-controller="AppCtrl" ng-cloak>
    
      <md-menu>
        <md-button style="text-transform: none;background-color:grey;" aria-label="Select date" ng-click="$mdMenu.open($event);tempHide=true;" ng-init="tempHide=false;">Select Date</md-button>
        <md-menu-content style="overflow: hidden;" width="5" >
          <md-calendar ng-model="myDate" ng-if="tempHide">
          </md-calendar>
        </md-menu-content>
      </md-menu>
      
      <md-menu>
        <md-button style="text-transform: none;background-color:grey;" aria-label="Select date" ng-click="$mdMenu.open($event)">Select Date (using min-date)</md-button>
        <md-menu-content style="overflow: hidden;" width="5" >
          <md-calendar ng-model="myDate" md-min-date="minDate">
          </md-calendar>
        </md-menu-content>
      </md-menu>
    
    </body>
    
    <!--
    Copyright 2016 Google Inc. All Rights Reserved. 
    Use of this source code is governed by an MIT-style license that can be in foundin the LICENSE file at https://material.angularjs.org/license.
    -->

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2020-05-14
      相关资源
      最近更新 更多