【问题标题】:UI Bootstrap datepicker in ngDialog doesn'tngDialog 中的 UI Bootstrap 日期选择器没有
【发布时间】:2015-11-09 15:41:50
【问题描述】:

我正在尝试在 ngDialog 中使用 ui-bootstrap 日期选择器,但我只能打开一次。当我选择日期时,选择器已关闭,我无法再打开它。 见plunker:http://plnkr.co/edit/obmNAWXAnCtNqa2YmioF

index.html:

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

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/js/ngDialog.min.js"></script>
  <script src="ui-bootstrap-tpls-0.14.3.min.js" type="text/javascript"></script>
  <script src="app.js"></script>

  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/css/ngDialog.min.css" />
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/css/ngDialog-theme-default.min.css" />
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" />
</head>

<body ng-controller="MainCtrl">
  <button ng-click="showCreateOrderPopup()">Create order</button>
</body>

</html>

app.js:

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

app.controller('MainCtrl', ['$scope', 'ngDialog', function($scope, ngDialog) {
  $scope.dateOptions = {
    formatYear: "yy",
    startingDay: 1,
    format: "shortDate"
  }

  $scope.createOrder = "";    
  $scope.showCreateOrderPopup = function() {
    ngDialog.openConfirm({
      template: "createOrderPopup.html",
      showClose: true,
      scope: $scope
    });
  }

  $scope.openedCreate = false;
  $scope.openDatePickerCreate = function($event) {
    $event.preventDefault();
    $event.stopPropagation();

    $scope.openedCreate = true;
  };
}]);

弹出:

<form name="createOrderForm">
  <div class="row">
    <div class="form-group">
      <label for="createOrderStart">Start Time</label>
      <div>
        <div ng-class="{'has-error' : createOrderForm.createOrderStart.$error.required}">
          <div class="input-group">
            <input ng-model="createOrder.startTime" type="text" class="form-control" id="createOrderStart" name="createOrderStart" uib-datepicker-popup="shortDate" is-open="openedCreate" datepicker-options="dateOptions" current-text="Today" required clear-text="Clear"
            close-text="Close" ng-readonly="false" />
            <span class="input-group-btn">
            <button type="button" class="btn btn-primary" ng-click="openDatePickerCreate($event)">Cal</button>
            </span>
          </div>
        </div>
      </div>
    </div>
  </div>
</form>

奇怪的是,当我动态添加日期选择器(使用 ngRepeat)时,一切正常。

任何想法如何使这项工作? 提前致谢。

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap datepicker


    【解决方案1】:

    对不起,我才知道你在说什么。

    将您的代码更改为以下内容:

    $scope.status= {opened: false}
    $scope.openDatePickerCreate = function ($event) {
        $scope.status.opened = true;
    };
    

    另外,将您的 html 更改为以下内容:

    is-open="status.opened"
    

    所有这些都是由于原型继承而发生的。您可能想对此进行研究。

    【讨论】:

    • 太棒了,成功了。为什么将其存储在数组和简单变量中存在差异?但无论如何,非常感谢。
    • 这与原始变量和原型继承有关。看看这个:github.com/angular/angular.js/wiki/Understanding-Scopes 大多数时候我在范围内创建一个对象是为了存储原始值“$scope.view = {}”甚至其他对象以避免这个问题。
    • 非常感谢,我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2015-07-23
    • 2017-07-12
    相关资源
    最近更新 更多