Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:防止模型更改导致视图更新_Angularjs - Fatal编程技术网

AngularJS:防止模型更改导致视图更新

AngularJS:防止模型更改导致视图更新,angularjs,Angularjs,我有一个指令小部件,其中许多被动态添加到页面的三个垂直列中。在指令中,我通过父属性跟踪小部件所在的列。我用于呈现此内容的HTML如下所示: <div id="columns"> <div id="column1"> <widget data-ng-repeat="widget in widgets | filter:{parent: 'column1'}" data-widget="widget" /> </div>

我有一个指令
小部件
,其中许多被动态添加到页面的三个垂直列中。在指令中,我通过
父属性跟踪
小部件
所在的列。我用于呈现此内容的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会自动更新基础数据中的父项。我的问题是,通过执行此模型更新,它还触发了指令的重新加载,因此它有效地重新初始化了小部件,从而消除了用户在其中所做的任何更改

我有没有办法允许Angular更新底层模型数据,但阻止它重新渲染视图的更改?我意识到这是角度应该做的,但在这种情况下,它是不希望的,并且足以让我考虑去除角度。


我可以试着用一个JSFIDLE来说明我遇到的问题,如果这样做有用的话。

我们可能需要看看这个小部件指令

但是不看它,如果重新处理视图就是删除对小部件所做的更新,那么小部件就不是很“棱角”


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

我最终自己解决了这个问题。当我试图在这里发布这个问题的演示时,我意识到这是不可能的,因为我的代码的结构。因此,我开始了一个重构的过程,并确保一切都是“角度的方式”。这大大改进了我的代码结构,感觉好多了。它还无意中解决了我的问题,而我却不知道是什么解决了它

快速回答-谢谢。我相信我的问题之所以会发生,是因为我将数据绑定到各个列的方式,因为小部件肯定是以“角度”的方式编写的。我正在通过更改指令的父级来更改该指令的DOM位置,我确信这会导致重新绘制。我不可能发布我的全部代码,因为有a)太多,b)连接到内部web服务。我将尝试整理一些东西来说明这个问题,JSFIDLE肯定是有用的。我以前也有过类似的拖放设置,但每次都没有重新初始化数据。现在正在尝试将其组合在一起-谢谢。只是出于兴趣,你用什么做拖放?我使用的是jQueryUI。不幸的是,我没有直接使用它,只是间接使用,但我相信我们也使用了jQueryUI。