ng选项中的过滤功能重复调用问题

filter function in ng options repetitive call issue

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

<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>

还有一个添加按钮,可在下方添加相同的下拉菜单,但不会显示已在上方下拉菜单中 select 为下一个下拉菜单编辑的选项。 在某种程度上,与此 fiddle 非常相似。 (另见app.js文件中写的exclude函数) http://plnkr.co/edit/zJnExGHQ9hJznoF4TyZI?p=preview

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

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

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

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

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

例如,我在下拉列表中添加了大约 5 个 billItem,从 billItem1、billItem2 依此类推,直到 billItem5。

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

我现在可以在数组中看到这样的序列 billItem2、billItem1、billItem3、billItem4、billItem5。

同样,当我再次执行整个操作时,序列再次打乱。我该如何防止这种情况?

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

如何实现?

However, the issue I am facing is that it keeps getting repeatedly called, even though I just open the state (html page) containing the dropdown(s).

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

When I persist this data (I have a save button) in the billItems array, got to a different state , and again return to this state (Using the edit button) and check the billItems array, the sequence has been changed.

很难说为什么会这样。这很可能不是您的代码的问题,而是返回数据的后端 API 的问题。例如,SQL 服务器不保证结果的顺序,除非您明确地将 ORDER BY 子句添加到 SELECT 语句。显示的顺序是否与 API 返回的顺序不同?