在Chrome浏览器中查看时,Angular Material的md-datepicker元素在默认日期的错误日历位置(例如,将来一两个月)开放。同样,如果选择年份视图,则会从默认日期开始一年或两年。
这篇文章(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(桌面版或移动版)上打开它们,特别是在页面下方尝试使用日期选择器。
这个问题(github.com/angular/material/issues/5055)暗示了Angular Material datepicker的类似问题,并将其归因于错误地放置在md-input-container中。但上面的第二个codepen链接具体表明问题是否重复,无论datepicker是否在md-input-container内,因此在这种情况下排除了答案。
有简单的解决方法吗?
答案 0 :(得分:2)
是的,这似乎是Chrome上的一个问题。见Issue #10144。我已提交Pull Request #10177来解决问题,但尚未合并。
以下是您修复的CodePen:Basic Usage Fixed。
我在我的分支上添加了一个依赖项:
bigint datatype
并将Angular的版本更新为1.5.9并使用了新的样式表。
这当然是临时修复。永久修复需要等待拉取请求通过。我不确定是否有办法加快这个过程。