当前位置: 首页 > 面试题库 >

在AngularJS中更新模型时,视图不会更新

苏晓博
2023-03-14
问题内容

我已经阅读了有关此问题的主题,例如:[\AngularJS中未更新视图,\但我仍然不明白如何在我的简单示例中应用它。

我有这个功能:

function MyPageView($scope) {
  var myModel = new MyModel();
  $scope.myModel = myModel;
}

myModel代码中的其他地方更新时(用户单击,交互,发送XHR请求时),它不会更新我的视图。我知道我需要使用$apply做些事情,但我不知道在哪里以及如何做。

有人可以向我解释如何针对这个简单用例解决此问题吗?

我的模型看起来像这样(如果这个问题是必要的)-它里面没有AngularJS代码:

var MyModel = function() {
  var _this = this;
  ...
  _this.load = function(){...};
  _this.updateModel = function(){...};
  ...
  return _this;
}

添加JSfiddle示例: http :
//jsfiddle.net/DAk8r/2/


问题答案:

问题的症结在于,您正在尝试将AngularJS与非常传统的“ jQuery汤式”
JavaScript模式混合使用。在Angular中,您应始终使用指令来进行DOM操作和交互(包括单击)。在这种情况下,您的代码应类似于以下内容:

<div ng-controller="myModelCtrl">
  <div>Number is {{myModel.number}}</div>
  <a ng-click="myModel.updateNumber()">Update Number</a>
</div>



function myModelCtrl($scope) {
   var myModel = new MyModel();
   $scope.myModel = myModel;
}

function MyModel() {
  var _this = this;

  _this.number = 0;

  _this.updateNumber = function() {
     _this.number += 1;
    alert('new number should display ' + _this.number);
  }

  return _this;
}

请注意,我们不是click使用jQuery 设置手动处理程序,而是使用Angular的内置ng- click指令。这使我们能够绑定到Angular范围生命周期,并在用户单击链接时正确更新视图。

这是来自AngularJS FAQ的引文;我加粗了一部分,可能会帮助您改掉习惯。

常见陷阱

Angular支持渠道(Freenode上的#angularjs)发现了Angular的新用户经常遇到的许多陷阱。本文档旨在在您很难找到它们之前指出它们。

DOM操作

停止尝试使用jQuery修改控制器中的DOM。真。这包括添加元素,删除元素,检索其内容,显示和隐藏它们。使用内置指令,或在需要时编写自己的指令来进行DOM操作。有关复制功能,请参见下文。

如果您想改掉习惯,请考虑从应用程序中删除jQuery。 真。Angular具有$
http服务和功能强大的指令,使其几乎总是不必要的。
Angular捆绑的jQLite具有一些在编写Angular指令时最常用的功能,尤其是绑定到事件。

最后,在您的示例中,使用此技术进行工作:http :
//jsfiddle.net/BinaryMuse/xFULR/1/



 类似资料:
  • 问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。

  • 问题内容: 我目前正在使用基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新的推文推到我的客户端,服务在其中等待新的推文。当一条新的推文到来时,该服务通过$ broadcast发送事件。 在我的控制器中是一个事件侦听器,其中传入的tweet在单独的函数中进行处理。此功能只是将新的推文推入我的推文范围。 现在,我的问题

  • 问题内容: 我用来加载图像。值是从一些范围变量加载的,如下所示: 我的问题是,当我运行时,它会使属性为空,但不会在属性中反映出来。因此,我不断看到需要空占位符的图像。 我该如何处理? 问题答案: 这是ngSrc和ngHref指令的预期行为。这些指令仅支持识别新路径,但是当路径不可用时,这些指令将以静默方式退出(我在这里看到一个拉取请求。)。 因此,当图像变量不再可用时,可能的解决方法是将ngSho

  • 问题内容: 在事件回调中更新模型时,更新模型属性对视图没有影响,是否有任何解决办法? 这是我的服务: 功能已在控制器中动态添加。 控制器: 视图: 因此,问题在于单击按钮会正确更新视图,但是当我从Channel收到消息时,什么也没发生,即使该函数被调用 问题答案: 你失踪了。 每当您从Angular世界外部触摸任何东西时,都需要调用,以通知Angular。可能来自: xhr回调(由$ http服务

  • 我现在迷路了。

  • 问题内容: 当我从纯JavaScript更改输入元素的值时,则不会更新角度模型。有什么方法可以通过在更改后手动触发一些事件来触发更新吗? 完整的示例可以在plunkr上找到。单击按钮后,我希望会以某种方式更新。有办法吗? 问题答案: 您不应该这样做(除非用于 测试 ,但即使如此,也请考虑量角器)。以这种方式与angular交互是一个坏主意。但是,如果必须,这是您的操作方法。 一种不同的中间方式是