2016-12-25 101 views
1

在Chrome中查看时,角度材料中的md-datepicker元素在默认日期的错误日历位置(例如未来一两个月)打开。同样,如果选择年份视图,它会从默认日期开始一两年。Chrome中的角度材料日期选择器开放位置错误

这篇文章(Angular material datepicker position is wrong except on Chrome)奇怪地问这个问题的反面,说它可以在Chrome中使用,但在其他浏览器中被破坏。对这个问题的回应表明它已经被FireFox,IE和Safari修复。

在Chrome桌面和Android上进行测试的结果相同(中断)。

下面是两个独立的Codepen存储库,显示问题。

http://codepen.io/anon/pen/pjGPGZ?editors=101

http://codepen.io/DionOrr/pen/pNmQzb

代码从第二环节是:

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css"> 
<body ng-app="myApp"> 
    <div ng-controller="myController"> 
    <p>Inside md-input-container 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate1" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate2" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate3" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate4" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate5" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate6" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate7" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
     <br> 
     <md-input-container> 
     <label>Test datepicker</label> 
     <md-datepicker ng-model="testdate8" md-placeholder="Enter date"></md-datepicker> 
     </md-input-container> 
    </p> 
    <p>Not inside md-input-container 
     <br> 
     <md-datepicker ng-model="testdate9" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate10" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate11" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate12" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate13" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate14" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate15" md-placeholder="Enter date"></md-datepicker> 
     <br> 
     <md-datepicker ng-model="testdate16" md-placeholder="Enter date"></md-datepicker> 
    </p> 
    </div> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js" type="text/javascript"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular-animate.min.js" type="text/javascript"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular-aria.min.js" type="text/javascript"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular-messages.min.js" type="text/javascript"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    var app = angular.module('myApp', ['ngMaterial', 'ngMessages']); 
    app.controller('myController', function($scope) { 
     $scope.testdate1 = new Date(); 
     $scope.testdate2 = new Date(); 
     $scope.testdate3 = new Date(); 
     $scope.testdate4 = new Date(); 
     $scope.testdate5 = new Date(); 
     $scope.testdate6 = new Date(); 
     $scope.testdate7 = new Date(); 
     $scope.testdate8 = new Date(); 
     $scope.testdate9 = new Date(); 
     $scope.testdate10 = new Date(); 
     $scope.testdate11 = new Date(); 
     $scope.testdate12 = new Date(); 
     $scope.testdate13 = new Date(); 
     $scope.testdate14 = new Date(); 
     $scope.testdate15 = new Date(); 
     $scope.testdate16 = new Date(); 
    }); 
</script> 

请打开它们在Chrome(无论是台式机或移动),尤其是试图降低了网页的datepickers。

这个问题(github.com/angular/material/issues/5055)暗示与Angular Material datepicker有类似的问题,并将它归入错误地放置在md-input-container中。但是,上面的第二个codepen链接明确地表明,不管datepicker是否在md-input-container中,问题都会重复出现,从而排除了这种情况下的答案。

有没有简单的解决方法?

+0

它在正确的位置打开 –

回答

1

是的,这似乎是Chrome上的问题。见Issue #10144。我已提交Pull Request #10177修复此问题,但尚未合并。

以下是您的CodePen固定:Basic Usage Fixed

我说我的分支的依赖:

https://rawgit.com/ppham27/material/dist/dist/angular-material.js 

和更新角度的版本1.5.9,并采用了新的样式表,太。

这当然是一个临时修复。永久性修复需要等待pull请求才能通过。我不确定是否有任何方法可以加快此过程。