model-view-controller - 在指令中更新 angularjs 中的 Controller 模型

标签 model-view-controller angularjs

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

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

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

感谢您的帮助。

最佳答案

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

尝试这样做:

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

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

关于model-view-controller - 在指令中更新 angularjs 中的 Controller 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14600569/

相关文章:

model-view-controller - MVC : why controller is the strategy for the view

pdf - 我正在使用 Rotativa 工具来显示 pdf。它在本地主机上运行良好,但在 Azure 平台上不起作用

javascript - AngularJS 按数组中的特定项目进行过滤

javascript - 如何在 AngularJS Controller 中发出同步 AJAX 请求

javascript - 我应该如何加载包含我的 Controller 的所有 javascript 文件?

laravel - 为什么 Laravel 与 Vue 一起发布? (SPA 与 MVC)

javascript - 单独文件中的 AngularJS 服务

ruby-on-rails - Rails 中通过 slug 而不是 id 查找记录

javascript - 如何在angularjs中动态创建变量名?

angularjs - Angular 插值、ng-bind 和 ng-translate 意外行为