【问题标题】:Datepicker in Angular ui modal not openingAngular ui模式中的日期选择器未打开
【发布时间】:2015-06-12 16:32:00
【问题描述】:

我的模态表单中有一个日期选择器。无论我尝试什么,日期选择器都不会打开。我的代码是:

   //In my parent controller - Called on button click
    $scope.openModal = function(indx){
        var modalInstance = $modal.open({
            animation:true,
            templateUrl:'myModal.html',
            controller: 'MyModalController'
        });

    };

  //In MyModalController
  $scope.open = function(){
          $scope.opened = true;
          console.log('Opened  is  : ' + $scope.opened);
      };

 //Modal view file myModal.html
 <input type="text" class="form-control" datepicker-popup="dd.MMMM.yyyy" ng-model="obj.startDate" is-open="$parent.opened" min-date="minDate" max-date="'2015-06-22'" close-text="Close" />
     <span class="input-group-btn">
     <button type="button" class="btn btn-default" ng-click="open(evt)">Close</button>
     </span>

之前有人问过这个问题,但给出的解决方案对我不起作用。我已经尝试了这里建议的所有内容:

ui.bootstrap.datepicker is-open not working in modal

https://github.com/angular-ui/bootstrap/issues/2307

【问题讨论】:

  • 当您关心modal 的范围时,为什么要使用is-open="$parent.opened"?您的意思是is-open="opened"(指模态控制器范围)吗?父控制器甚至没有一个名为 opened 的属性。
  • 是的,我根据我提到的另一个问题中提供的解决方案将其设为 $parent.opened。最初它刚刚打开,这也不起作用:(

标签: angularjs angular-ui-bootstrap bootstrap-modal bootstrap-datepicker


【解决方案1】:

$event.preventDefault()$event.stopPropagation() 添加到控制器中的打开函数中,并确保将$event 传递给ng-click 中的打开函数:

  $scope.open = function($event) {
    $event.preventDefault();
    $event.stopPropagation();

    $scope.opened = true;
  };

在你看来:

<button type="button" class="btn btn-default" ng-click="open($event)">Close</button>

运行代码 sn-p 以查看工作演示:

var app = angular.module('demo', ['ui.bootstrap', 'ngAnimate']);

app.controller('MainCtrl', ['$scope', '$modal', function($scope, $modal){

  $scope.open = function () {

    var modalInstance = $modal.open({
      templateUrl: 'myModalContent.html',
      controller: 'ModalInstanceCtrl'
    });
  
  };
  
}]);

app.controller('ModalInstanceCtrl', ['$scope', '$modalInstance', function ($scope, $modalInstance) {
  
  $scope.open = function($event) {
    $event.preventDefault();
    $event.stopPropagation();

    $scope.opened = true;
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };
}]);
@import url("//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css");
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular-animate.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.0.js"></script>

<div ng-app="demo">
  <div ng-controller="MainCtrl" class="container">
    <button class="btn btn-default" ng-click="open()">Open Modal</button>
  </div>
  
  
  <script type="text/ng-template" id="myModalContent.html">
    <div class="modal-header">
      <h3 class="modal-title">Modal with a DatePicker</h3>
    </div>
    <div class="modal-body">
       <div class="col-md-6">
            <p class="input-group">
              <input type="text" class="form-control" datepicker-popup="shortDate" ng-model="dt" is-open="opened"  />
              <span class="input-group-btn">
                <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
              </span>
            </p>
        </div>   
    </div>
    <div class="modal-footer">
      <button class="btn btn-primary" ng-click="cancel()">Cancel</button>
    </div>
  </script>
  
  
</div>

【讨论】:

  • 不工作!您的代码 sn-p 运行完美,我已经更改了代码以完美匹配它,但日期选择器仍然无法打开:(
  • 我的错,我忘记从打开的变量中删除 $parent。它现在运行良好,将其标记为答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多