javascript - 带 MD 菜单的 MD 日期选择器

标签 javascript angularjs angular-material

我在 md-menu 中有一个 md-date-picker,但是当我单击 datepicker 时,md-menu 关闭。这是codepen为了这。与此相关bug ng- Material 。有什么办法可以解决这个问题?

HTML:

<div class="md-menu-demo menudemoBasicUsage" ng-controller="BasicDemoCtrl as ctrl" ng-app="MyApp">

  <div class="menu-demo-container" layout-align="center center" layout="column">
    <h2 class="md-title">Month Select</h2>
    <p>Select a month by clicking the input</p>
    <md-menu>

      <input md-menu-origin="" aria-label="Open phone interactions menu" ng-focus="ctrl.openMenu($mdOpenMenu, $event)" ng-model="ctrl.selectedMonth">
      <md-menu-content width="4" ng-click="$event.stopPropagation()">
<md-datepicker ng-model="dateFilter" md-placeholder="Till date" md-min-date="dateFilter.fromDate"></md-datepicker>
      </md-menu-content>
    </md-menu>
  </div>
</div>

JS:

angular
  .module('MyApp')
  .controller('BasicDemoCtrl', function DemoCtrl($mdDialog) {
    var originatorEv;

    this.openMenu = function($mdOpenMenu, ev) {
      originatorEv = ev;

          $mdOpenMenu(ev);
        };

        this.setMonth = function(val) {
          this.month = val;
          this.setSelectedMonth();
        };

        this.notificationsEnabled = true;
        this.toggleNotifications = function() {
          this.notificationsEnabled = !this.notificationsEnabled;
        };

        this.nextYear = function() {
          this.year++;
          this.setSelectedMonth();

        };

        this.preYear = function() {
          this.year = this.year - 1;
          this.setSelectedMonth();
        };

      }).directive('stopEvent', function() {
        return {
          restrict: 'A',
          link: function(scope, element, attr) {
            if (attr && attr.stopEvent)
              element.bind(attr.stopEvent, function(e) {
                e.stopPropagation();
              });
          }
        };
      });

最佳答案

我找到了一个可行的解决方案,但不是最佳答案。

HTML:
<md-datepicker id="myDatePicker"
    ng-model="dateFilter" 
    md-placeholder="Till date" 
    md-min-date="dateFilter.fromDate">
</md-datepicker>

JS:
function setupDateButton()
{
    var dateButtonFix = document.getElementById("myDatePicker").children;
    for (var i = 0; i < dateButtonFix.length; i++)
    {
        if (dateButtonFix[i].tagName == 'BUTTON' || dateButtonFix[i].tagName == 'DIV')
        {
            if (dateButtonFix[i].tagName == 'DIV')
            {
                var child2 = dateButtonFix[i].children;
                for (var j = 0; j < child2.length; j++)
                {                               
                    if (child2[j].tagName == 'BUTTON')
                    {
                        child2[1].setAttribute("md-prevent-menu-close", "md-prevent-menu-close");
                    }
                }
             }
             else
                 dateButtonFix[0].setAttribute("md-prevent-menu-close", "md-prevent-menu-close");
         }
    }    
}    
setupDateButton();

我确信有更好的方法可以做到这一点,但就目前而言,它是有效的。

关于javascript - 带 MD 菜单的 MD 日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35404147/

相关文章:

javascript - 检索 HTML 表值

html - 禁用样式(垫扩展面板)

angular-material - 使用 CDK 拖放时 Angular Mat-List-Option 布局发生变化

javascript - jSignature 未从显示 :none to display:block correctly in multi-page form 移动

javascript - setTimeout和setInterval第一个参数不加括号,不加双引号

javascript - 在 html 中,window.onpopstate 在加载和后退箭头时都会触发 - 如何知道?

javascript - 设置 Jasmine & Karma 来测试 Angular

javascript - 隔离范围 - 访问元素上的范围属性

javascript - foreach中的 Angular 调用函数

angular-material - 如何让 md-search-text-change 在触发调用之前等待 1000 毫秒?