【问题标题】:Update a controller model in angularjs in a directive在指令中更新 angularjs 中的控制器模型
【发布时间】:2013-01-30 09:30:55
【问题描述】:

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

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

为此,我尝试在指令中使用$apply 函数并设置模型值x 和y。然后我还使用$observe 函数来更新视图:here is my 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 模式的阅读建议(我发现开发人员指南对初学者来说有点苛刻)

感谢您的帮助。

【问题讨论】:

    标签: model-view-controller angularjs


    【解决方案1】:

    您的方法的问题是您正在更改整个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/

    【讨论】:

    • 谢谢!确保能很好地理解你;在我的指令中传递的 ngModel 不是当前模型,但如果我理解 API doc,一种可以修改我的模型的“即时”控制器?
    • 您最初传递给指令的ngModel 是正确的,问题是您将其替换为在指令中创建的新对象。就像您在执行 model.$modelValue = new Object(); 导致 $modelValue 不再引用 players 数组中的元素(初始 ngModel),而是引用您刚刚创建的新对象。
    • 啊!好的,现在我想我明白了……谢谢你的精确。
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多