页面上的许多UI-Bootstrap-Datepickers加载速度非常慢 - 我可以使用单个实例并移动元素吗?

Hol*_*ley 6 angularjs angularjs-directive angular-ui-bootstrap

我有很多行使用'ng-repeat'显示.每行有2个UI-Bootstrap-Datepickers.当有很多行时,页面的加载速度非常慢.

我想只使用一个日期选择器然后在用户点击的字段下动态移动它,或者可能在点击时加载指令并在选择完成后再次卸载它.

有关如何实现这一目标的任何想法?

<li ng-repeat="ticket in data.tickets">

    <div ng-click="openAddStartCal($event, ticket)" ng-hide="currentTicketUpdating == ticket.TicketId && currentParameterUpdating =='startCal' && startCalSaving == true">
                        <input type="text"
                               starting-day="2"
                               show-button-bar="false"
                               show-weeks="false"
                               class="form-control addTicketDateInput"
                               datepicker-popup="dd MMM"
                               ng-model="ticket.StartDate"
                               ng-change="saveEditStartDate(ticket)"
                               is-open="checkStartOpened(ticket)"
                               min-date=""
                               max-date="'2015-06-22'"
                               datepicker-options="dateOptions"
                               date-disabled="disabled(date, mode)"
                               ng-required="true"
                               close-text="Close" />
                    </div>
</li>
Run Code Online (Sandbox Code Playgroud)

Zla*_*tko 4

您可以使用 ng-switch 或 ng-if。ng-switch/ng-iff 实际上会从 DOM 中删除其中的任何内容,直到条件评估为 true。

例如:

<li ng-repeat="ticket in data.tickets">
    <div ng-click="openAddStartCal($event, ticket);ticket.openCal = !ticket.openCal" ng-hide="currentTicketUpdating == ticket.TicketId && currentParameterUpdating =='startCal' && startCalSaving == true">
          <div ng-if="ticket.openCal">
                    <input type="text"
                           starting-day="2"
                           show-button-bar="false"
                           show-weeks="false"
                           class="form-control addTicketDateInput"
                           datepicker-popup="dd MMM"
                           ng-model="ticket.StartDate"
                           ng-change="saveEditStartDate(ticket)"
                           is-open="checkStartOpened(ticket)"
                           min-date=""
                           max-date="'2015-06-22'"
                           datepicker-options="dateOptions"
                           date-disabled="disabled(date, mode)"
                           ng-required="true"
                           close-text="Close" />
                </div>
        </div>
</li>
Run Code Online (Sandbox Code Playgroud)

请注意ticket.openCal = !ticket.openCalng-click 的添加,然后在 ng-if 中使用它。(顺便说一句,ig 你在 openAddStartCal 中有一些对此有用的东西,你可以使用它。)

或者,您也可以使用诸如空 ng-include 之类的东西(直到行单击):

<li ng-repeat="ticket in data.tickets">
    <div ng-click="openAddStartCal($event, ticket);ticket.openCal = !ticket.openCal" ng-hide="currentTicketUpdating == ticket.TicketId && currentParameterUpdating =='startCal' && startCalSaving == true">

      <div ng-include=""></div>
</li>
Run Code Online (Sandbox Code Playgroud)

然后当有点击事件时设置 ng-include 变量。

  • 我很好奇,所以我把它搞砸了 - http://plnkr.co/edit/LyLdqurWyrRhrF7ZmoDB?p=preview (2认同)