Angular/Bootstrap 日期选择器
Angular/Bootstrap Datepicker
我现在正在使用 AngularJS 和 UI Bootstrap,我已经将可爱的 'UI-Bootstrap-DatePicker' 绑定到我的 [=22] 的每一行=], 问题是;当我单击时,它会在每一行上打开一个 DatePicker 实例。
我认为每一行都有自己的范围,这将隔离在该范围内触发的事件。看来情况并非如此。
对此的 AngularJS 方法是什么?对于此示例,我已尝试将我的代码简化到最低限度。
<script>
// Will go into application.js
(function () {
var app = angular.module("ngListApp", ['ui.bootstrap']);
}());
// Will go into orderController.js
(function () {
var app = angular.module("ngListApp").controller('OrderController', function ($scope) {
$scope.httpOrders = [{OrderId: 1, OrderDate: '1 June 2015'},{OrderId: 12, OrderDate: '2 July 2016'},{OrderId: 123, OrderDate: '3 August 2017'}];
$scope.open = function ($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.format = 'dd-MMMM-yyyy';
});
}());
</script>
<div ng-controller="OrderController">
<table>
<tr ng-repeat="current in httpOrders">
<td><input ng-model="current.OrderId" class="form-control" /></td>
<td class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="current.OrderDate" 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>
</td>
</tr>
</table>
</div>
一个可能的解决方法是为每一行使用一个新的 OrderController
实例。尝试将此添加到您的 html 模板:
<div>
<table>
<tr ng-repeat="current in httpOrders" ng-controller="OrderController">
<td><input ng-model="current.OrderId" class="form-control" /></td>
<td class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="current.OrderDate" 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>
</td>
</tr>
</table>
</div>
请注意,我在 ng-repeat
指令之后将 ng-controller
添加到 tr
。这基本上意味着每次迭代 httpOrder
集合时,它都会创建 OrderController
的新实例。希望这对您有所帮助,如果您有任何问题,请告诉我。
我现在正在使用 AngularJS 和 UI Bootstrap,我已经将可爱的 'UI-Bootstrap-DatePicker' 绑定到我的 [=22] 的每一行=], 问题是;当我单击时,它会在每一行上打开一个 DatePicker 实例。
我认为每一行都有自己的范围,这将隔离在该范围内触发的事件。看来情况并非如此。
对此的 AngularJS 方法是什么?对于此示例,我已尝试将我的代码简化到最低限度。
<script>
// Will go into application.js
(function () {
var app = angular.module("ngListApp", ['ui.bootstrap']);
}());
// Will go into orderController.js
(function () {
var app = angular.module("ngListApp").controller('OrderController', function ($scope) {
$scope.httpOrders = [{OrderId: 1, OrderDate: '1 June 2015'},{OrderId: 12, OrderDate: '2 July 2016'},{OrderId: 123, OrderDate: '3 August 2017'}];
$scope.open = function ($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.format = 'dd-MMMM-yyyy';
});
}());
</script>
<div ng-controller="OrderController">
<table>
<tr ng-repeat="current in httpOrders">
<td><input ng-model="current.OrderId" class="form-control" /></td>
<td class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="current.OrderDate" 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>
</td>
</tr>
</table>
</div>
一个可能的解决方法是为每一行使用一个新的 OrderController
实例。尝试将此添加到您的 html 模板:
<div>
<table>
<tr ng-repeat="current in httpOrders" ng-controller="OrderController">
<td><input ng-model="current.OrderId" class="form-control" /></td>
<td class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="current.OrderDate" 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>
</td>
</tr>
</table>
</div>
请注意,我在 ng-repeat
指令之后将 ng-controller
添加到 tr
。这基本上意味着每次迭代 httpOrder
集合时,它都会创建 OrderController
的新实例。希望这对您有所帮助,如果您有任何问题,请告诉我。