【问题标题】:filter function in ng options repetitive call issueng选项中的过滤功能重复调用问题
【发布时间】:2023-03-26 17:41:01
【问题描述】:

我在 ng-repeat 中有一个下拉菜单,它在 ng-model 中存储项目的 id

<tr ng-repeat="bill in billItems track by $index">

而且,我的 ng-options 中有一个过滤器,它遍历如下列表:-

<td>
    <select ng-model="bill.itemId"  ng-required="true"
        ng-options="item.itemId as item.itemName for item in itemRates | 
                    exclude: bill.itemId: billItems">

        <option value="">Select Here</option>
    </select>
</td>

还有一个添加按钮,它在下面添加相同的下拉菜单,但不显示在上面的下拉菜单中已经为下一个选择的选项。 在某种程度上,与这个小提琴非常相似。 (另见app.js文件中写的排除函数) http://plnkr.co/edit/zJnExGHQ9hJznoF4TyZI?p=preview

以上帮助我在我添加的下一个下拉列表中禁用选择选项。

除了一些调整之外,上面过滤器函数中编写的代码与我的非常相似。

但是,我面临的问题是它不断被重复调用,即使我只是打开包含下拉列表的状态(html 页面)。

已通过使用 console.log("In exclude function()") 语句验证了这一点。

另一个问题,据推测是由于这个原因,当页面被保存并再次打开它时,我在下拉列表中添加 billItems 的顺序随机打乱。

例如,我在下拉列表中添加了大约 5 个 billItem,例如从 billItem1、billItem2 等到 billItem5 的顺序。

当我将这些数据(我有一个保存按钮)保存在 billItems 数组中时,进入不同的状态,然后再次返回此状态(使用编辑按钮)并检查 billItems 数组,顺序已更改。

我现在可以在数组中看到类似 billItem2、billItem1、billItem3、billItem4、billItem5 的顺序。

再一次,当我再次做这整件事时,序列再次洗牌。我该如何防止这种情况发生?

我希望结果与我一个接一个添加下拉列表的顺序相同。

如何实现?

【问题讨论】:

    标签: angularjs angularjs-filter angularjs-ng-options


    【解决方案1】:

    但是,我面临的问题是它不断被重复调用,即使我只是打开包含下拉列表的状态(html 页面)。

    在 AngularJS 中,每个过滤器在每个摘要周期中至少调用一次。打开下拉菜单会触发摘要循环,因此每次至少调用一次所有过滤器。

    当我将这些数据(我有一个保存按钮)保存在 billItems 数组中时,进入不同的状态,然后再次返回此状态(使用编辑按钮)并检查 billItems 数组,顺序已更改。

    很难说为什么会这样。这很可能不是您的代码的问题,而是返回数据的后端 API 的问题。例如,SQL Server 不保证结果的顺序,除非您在 SELECT 语句中显式添加 ORDER BY 子句。显示的顺序和API返回的顺序有区别吗?

    【讨论】:

    • 那将是一个否。基本上,我首先保存到数组中并将其发送到下一个状态。最终,当我从另一个状态持久化到数据库时,顺序与我想要的相同。但是,当我想编辑此页面(如添加或删除项目)并再次保存时,我看到顺序已更改。所以,我觉得这可能只是一个 UI 问题。
    • 好的,所以在做了一些自省之后,我将 order by 子句添加到我的查询中,现在一切似乎都工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2016-09-24
    • 2017-02-08
    相关资源
    最近更新 更多