【问题标题】:How to preserve DOM elements when using ng-repeat with filter?使用带有过滤器的 ng-repeat 时如何保留 DOM 元素?
【发布时间】:2015-05-07 23:29:32
【问题描述】:

我有一个带有过滤器的ng-repeat。当过滤器过滤掉一些项目,然后在另一个过滤器更改后恢复它们时,会为这些项目创建新的 DOM 元素。如果对项目进行了任何 DOM 操作,则在项目被隐藏并使用过滤器恢复后,它就会丢失。

有没有办法保留 DOM 元素,即使 item 被过滤器删除?

我尝试使用track by,但没有帮助。

这是重现问题的fiddle。 重建步骤:

  1. 点击按钮将颜色应用到 DOM 元素
  2. 在过滤器输入中键入一些内容(例如“ap”)以隐藏某些元素
  3. 移除过滤器。修复后的元素失去了风格。

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angularjs-filter


    【解决方案1】:

    Angualr 正在动态添加和删除这些模板。模板是指您的 ng-repeat 中的任何标签。没有办法在 ng-repeat 中保留它。相反,如果您希望保留此颜色更改,则它需要成为您正在重复的模型的一部分。这有意义吗?

    直接给模板添加颜色style="color: {{fruit.color}}"

    看看我在说什么

    http://jsfiddle.net/nferjvsp/1/

    【讨论】:

    • 谢谢,这是有道理的。但是我希望有办法解决这个问题。在我的实际用例中,DOM 操作代码比仅设置预定义颜色更复杂,因此在模板中添加相关的模型表达式并不容易。
    • @TMG 问题的根源在于您试图在 Angular 之外执行此操作。在 Angular 中做所有事情时,Angular 会根据需要为您更新 DOM。如果你有复杂的 DOM 操作代码,听起来你需要一个指令来处理它。然后你只需将指令粘贴到这些元素上,DOM 就会根据需要更新。
    • @TMG 这个 plunker 显示了 dnc253 在谈论什么jsfiddle.net/798w3soy
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多