2013-02-26 70 views
0

我有一个指令widget,其中许多动态添加到页面到三个垂直列之一。在指令中,我通过parent属性跟踪widget所在的列。我用呈现此是作为HTML如下:AngularJS:防止从模型更改的视图更新

<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放在一起,说明如果使用该问题,我将拥有该问题。

+0

JSFiddle肯定会有用。我以前有过类似的拖放设置,并且每次都不重新初始化数据。 – 2013-02-26 14:29:22

+0

试图把现在放在一起 - 谢谢。只是出于兴趣,你用什么来拖放?我正在使用jQuery UI。 – jwest 2013-02-26 17:09:33

+0

不幸的是,我没有直接处理它,只是间接的,但我相信我们也使用jQuery-UI。 – 2013-02-27 15:24:44

回答

0

我终于设法解决了这个问题。在尝试敲出问题的演示文稿发布到此处时,我意识到由于我的代码结构,这是不可能的。所以,我开始了一个重构的过程,并确保一切都是'角度的方式'。这极大地改进了我的代码结构,感觉好多了。它也无意中解决了我的问题,但我实际上并不知道解决了什么问题!

0

我们可能需要查看该widget指令。

但是不看它,如果重新处理视图消除了对小部件所做的更新,那么这个小部件不是很“角”。

我的意思是说,你不应该在DOM中保留用户输入,你应该通过ngModel或甚至自定义指令等指令将用户输入保存到你的范围。如果您不希望将指令中的更改发布到其父模型中,则必须将其保存到它自己的隔离范围中,然后在需要时将更改推送出去。

+0

快速回答 - 谢谢。我相信我的问题正在发生,因为我将数据绑定到单个列的方式,因为这个小部件绝对是以'Angular'方式编写的。我通过更改父指令来更改指令的DOM位置,并且我确信它会导致重绘。我不可能发布我的整个代码,因为它有太多的方法,并且b)连接到内部Web服务。我会试着把一些东西放在一起来说明这个问题 – jwest 2013-02-26 14:07:48