1

我有一个指令widget,其中许多是动态添加到页面中的三个垂直列之一。widget在该指令中,我通过parent属性跟踪该列所在的列。我用来渲染它的 HTML 如下:

<div id="columns">
    <div id="column1">
        <widget data-ng-repeat="widget in widgets | filter:{parent: 'column1'}" data-widget="widget" />
    </div>
    <div id="column2">
        <widget data-ng-repeat="widget in widgets | filter:{parent: 'column2'}" data-widget="widget" />
    </div>
    <div id="column3">
        <widget data-ng-repeat="widget in widgets | filter:{parent: 'column3'}" data-widget="widget" />
    </div>
</div>

每个widget都是指定的类型,因此它们各自具有不同的内容并且彼此独立。用户可以在不同的列之间拖放这些,Angular 会自动更新parent底层数据中的这些。我的问题是,通过 Angular 进行此模型更新,它还触发了指令的重新加载,因此它有效地重新初始化了小部件,从而消除了用户对其所做的任何更改。

我有什么办法可以让 Angular 更新底层模型数据,但阻止它重新渲染视图的更改?我意识到这是 Angular 应该做的,但在这种情况下它是不可取的,并且足以让我考虑删除 Angular。

我可以尝试整理一个 JSFiddle 来说明我遇到的问题,如果它有用的话。

4

2 回答 2

0

我们可能需要查看那个小部件指令。

但是如果不看它,如果重新处理视图正在消除对小部件所做的更新,那么小部件就不是很“Angular”。

我的意思是,您不应该在 DOM 中保留用户输入,您应该通过诸如 ngModel 甚至自定义指令之类的指令将用户输入保留到您的范围。如果您不想将指令中的更改发布到它的父模型中,则必须将其持久化到它自己的隔离范围中,然后在需要时将更改推出。

于 2013-02-26T14:00:44.930 回答
0

我最终自己解决了这个问题。在尝试在此处发布该问题的演示时,我意识到由于我的代码结构,这将是不可能的。所以,我已经开始了重构并确保一切都是“Angular 方式”的过程。这大大改善了我的代码结构,感觉好多了。它也无意中解决了我的问题,而我实际上并不知道是什么解决了它!

于 2013-03-04T09:16:26.617 回答