【问题标题】:Using the angular datepicker with ng-repeat使用带有 ng-repeat 的角度日期选择器
【发布时间】:2017-01-06 20:30:53
【问题描述】:

我正在尝试编写一些东西,让我可以编辑带有日期的记录,我的表中有这个:

        <tr ng-repeat="event in eventFixtures track by $index">
            <td>{{event.date | date: 'dd/MM/yyyy'}}</td>
            <td>
                <div class="row">
                    <div class="col-md-6">
                        <p class="input-group">
                            <input type="text"
                                   class="form-control"
                                   ng-model="event.date"
                                   is-open="fixture{{$index}}popup"
                                   ng-click="openFixturePopup($index)"/>
                        </p>
                    </div>
                </div>
            </td>
        </tr>

但是,当我点击其中一个输入框时,日期选择器不显示。

打开函数在这里:

$scope.openFixturePopup = function(fixture) {
    $scope["fixture"+fixture+"popup"] = true;
};

变量是这样定义的:

    for(var i = 0; i < data.length; i++) {
        $scope["fixture"+i+"popup"] = false;
    }

通过将变量的值打印在表格上方,它们正在被更改,如果我创建一个链接到特定夹具弹出窗口的输入,例如像这样:

<div class="row">
    <div class="col-md-6">
        <p class="input-group">
            <input type="text"
                   class="form-control"
                   uib-datepicker-popup="{{format}}"
                   ng-model="testDate"
                   is-open="fixture0popup"
                   ng-click="openFixturePopup(0)"/>
        </p>
    </div>
</div>

效果很好。

有人知道是什么原因造成的吗?

【问题讨论】:

    标签: javascript angularjs datepicker angular-bootstrap


    【解决方案1】:

    我有一种预感,尝试对变量名使用插值是导致此问题的原因。我尝试了很多东西,比如$scope[dynamicVarName]$scope.$eval([dynamicVarName]) 等等,但都无济于事。我不能肯定这是你的问题,但我想我找到了一个你可以尝试的解决方案。

    在您的事件上设置一个isOpen 标志并查看它,而不是为状态创建一堆范围变量。这也是有利的,因为如果索引发生变化,打开状态会随着数组元素移动,因此您获得无效状态的可能性较小。

    代码如下所示:

    var app = angular.module("myApp", [])
    .controller("myCtrl", function ($scope) {
      $scope.eventFixtures = [
        {name: "1", date: "1-1-01"},
        {name: "2", date: "2-2-02"},
        {name: "3", date: "3-3-03"},
        {name: "4", date: "4-4-04"},
        {name: "5", date: "5-5-05"}
      ];
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="myApp" ng-controller="myCtrl">
      <table>
        <tr ng-repeat="event in eventFixtures track by $index">
          <td>{{event.date | date: 'dd/MM/yyyy'}}</td>
          <td>
            <div class="row">
              <div class="col-md-6">
                <p class="input-group">
                  <input type="text"
                         class="form-control"
                         ng-model="event.date"
                         is-open="{{event.isOpen}}"
                         ng-blur="event.isOpen = false;"
                         ng-focus="event.isOpen = true;"/>
                  isOpen? {{event.isOpen || false}}
                </p>
              </div>
            </div>
          </td>
        </tr>
      </table>
    </div>

    【讨论】:

    • 有效!稍作修改:` `但是我现在确实有一个新问题,即日期在第一次加载时没有显示在框中,但当我选择一个新日期时它会显示这很奇怪......不过谢谢!
    • @MysteriousWaffle 我很好奇它第一次加载时没有显示的日期。你能创建一个新问题并复制这个问题吗?我从未使用过 angular-bootstrap 或 datepicker(我使用 jQueryUI),所以我不熟悉获得该功能所需的所有内容,但我总是可以四处寻找并修改演示以使其工作。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多