2

我试图理解 angularJS,它的方法与我看到的脏检查模型更新不同。

基本上,我有一个指令 ng-draggable,它使元素......可拖动。我有一个模型与每个具有属性的元素链接,x并且y- 与模型链接的元素的位置 - 我希望指令更​​新模型。

为此,我尝试$apply在指令中使用该函数并设置模型值 x 和 y。然后我还使用该$observe函数来更新视图:这是我的 jsfiddle(注意我使用工厂来捕捉鼠标事件)

        var mousemove = function(event) {
           var y = event.screenY - startY;
           var x = event.screenX - startX;
              scope.$apply(function(){
                  attr.$set('ngModel', {'x': x, 'y': y});
              });
         }

它似乎工作正常。但是,当我使用保存按钮检查模型值时(它在控制台中打印模型),位置 x 和 y 不会更新。

所以我的问题是如何让它工作?更一般地说,这里发生了什么?关于 angularJS 中的 MVC 模式的任何阅读建议(我发现开发人员指南对初学者来说有点苛刻)

感谢您的帮助。

4

1 回答 1

2

您的方法的问题是您正在更改整个ngModel引用,而不是仅更改其属性之一(x和/或y)。当你这样做时,你失去了与初始ngModelplayers数组内的对象)的连接,因此失去了与“真实”模型(对象play)的连接。

尝试这样做:

scope.$apply(function() {                 
    model.$modelValue.x = event.screenX - startX;
    model.$modelValue.y = event.screenY - startY;
});

jsFiddle: http ://fiddle.jshell.net/y7nVJ/

于 2013-01-30T14:49:18.150 回答