javascript - UI Bootstrap Datepicker 弹出窗口不适用于 Modal 和 ControllerAs

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

我在这里看到了类似的问题,答案似乎是管理日期选择器是否打开的变量应该位于父范围内。我以为我已经在这里做到了,但它仍然不起作用。我的代码和我见过的所有其他代码之间的区别在于,我使用 Controller ,而其他人都使用 $scope。这应该如何与 Controller 一起工作?

Full Plnkr Here

这是主页

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');    </script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" href="style.css" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.min.js" data-semver="1.4.6"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.1/ui-bootstrap-tpls.min.js"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl as main">
    <button class="btn btn-primary" ng-click="main.openModal()">Open Modal</button>
  </body>

</html>

这里是模态

<div class="modal-header">
  {{modal.title}}
</div>
<div class="modal-body">

  <p class="input-group">
    <input type="date" 
        class="form-control" 
        ng-model="modal.dt" 
        is-open="main.opened" 
        close-text="Close" />

    <span class="input-group-btn">
      <button type="button" class="btn btn-default" ng-click="main.opened = true">
        <i class="glyphicon glyphicon-calendar"></i>
      </button>
    </span>
  </p>

</div>

这是 Controller

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

app.controller('MainCtrl', function($modal) {
var main = this;

  main.openModal = function() {
    var modalInstance = $modal.open({
      templateUrl: 'modal.html',
      controller: 'ModalInstanceCtrl as modal',
      size: 'sm'
    });
  };
});


app.controller('ModalInstanceCtrl', function($modalInstance) {
    var modal = this;

    modal.title = 'Modal Title';
});

最佳答案

您忘记了输入元素上的 datepicker-popup 属性:

<input type="date" datepicker-popup
            class="form-control" 
            ng-model="main.dt" 
            is-open="main.opened" 
            close-text="Close" />

此外,您需要将以下代码添加到 ng-click 中,以阻止 click 事件传播到按钮的父元素(单击父 div 将立即关闭日期选择器弹出窗口) :

$event.preventDefault(); $event.stopPropagation();

例如

ng-click="$event.preventDefault(); $event.stopPropagation(); main.opened = true"

或者如果您愿意,也可以将其放入方法中。

Updated Plunker

关于javascript - UI Bootstrap Datepicker 弹出窗口不适用于 Modal 和 ControllerAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726297/

相关文章:

javascript - 使用数据库值更改 div 背景颜色

javascript - AngularJS:在更改选择元素之前调用 ng-change

javascript - ngStorage 和 $window.localStorage 的区别

css - 导航栏部分隐藏设备上的 <h1> 标题

java - 无法在 Android 中使用 Javascript webview 获取 GPS 坐标

javascript - 如果我在 Angular2 中创建新类,则会出现此错误 : TypeError: http_2. Headers is not a constructor

angularjs - Grails Asset-pipeline 不加载 Angular 部分模板

css - 引导下拉菜单不使用可用空间并在向右拉时中断

javascript - 为什么下面的代码生成 4 个元素而不是 2 个?

javascript - Angularjs:如何使用 $scope 中的数据填充第二个位置的二维数组