该视图时不会更新在AngularJS模型更新(The view is not updated whe

2019-07-18 08:02发布

我已经在这个问题上读线程,如: 视图不更新AngularJS ,但我仍然无法理解如何应用它在我的简单的例子。

我有这样的功能:

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

myModel在代码中(当用户点击,交互,发送XHR请求),在其他地方更新它不更新我的看法。 我明白我需要做一些与$申请,但我不明白的地方,以及如何。

谁能向我解释我该如何解决这个问题,这个简单的用例?

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

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

添加的jsfiddle例如: http://jsfiddle.net/DAk8r/2/

Answer 1:

你的问题的关键是,你试图用一个非常传统的,“jQuery的汤式”的JavaScript模式混合AngularJS。 - 在角度,你应该总是使用指令做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处理程序,我们使用角度的内置ng-click指令。 这让我们在配合于角范围的生命周期,并正确,当用户点击链接更新视图。

下面是从报价AngularJS常见问题 ; 我加粗,可以帮助你打破习惯的一部分。

常见缺陷

该角支撑通道(Freenode上#angularjs)看到许多重复的缺陷在于角落入的新用户。 该文件旨在你发现他们艰难地前点出来。

DOM操作

停止尝试使用jQuery修改DOM的控制器。 真。 这包括添加元素,移除元素,检索其内容,显示和隐藏它们。 使用内置的指令,或写自己在必要时,做你的DOM操作。 可以看看下面的复制功能。

如果你正在努力打破这个习惯,可以考虑从应用中删除的jQuery。 真。 角有$ http服务和强大的指令,使得它几乎总是必要的。 角的捆绑jQLite有书面角指令,特别是结合事件中最常用的功能了一把。

最后,在这里你的榜样,使用这种技术的工作: http://jsfiddle.net/BinaryMuse/xFULR/1/



Answer 2:

尝试$范围。$适用()的控制器内您更新后的模型



Answer 3:

http://jsfiddle.net/zCC2c/

你的问题是双重的。

1)在你的jsfiddle语法错误,如DOMElements(如一个由$返回(这个)你的函数clickhandler里没有阻止默认值。实际上,你需要通过一个事件。(小的语法问题)。

2)通过将控制器的范围,像这样在您的变量定义:

 function MyCtrl($scope){
     $scope.foo = foo;
 }

你保证它得到每类实例化运行一次。

你想要的是:

 function MyCtrl($scope){
      $scope.someAngularClickHandler=function(){
         $scope.foo = foo;
      }
 }

然后你的链接

   <a href="foo" id="bar" ng-click="someAngularClickHandler()">

为了更详尽codesample查看链接的jsfiddle。

该理论的一个很好的概述可以在这里先说说发现:

http://www.youtube.com/watch?feature=player_embedded&v=VxuN6WO3tIA



Answer 4:

在角应用程序,模型通常有时$范围实施,而不是作为一个独立的JavaScript对象。 这是你的应用程序中显示了如何做一个重写

function myModelCtrl($scope) {
  $scope.number = 0;
  $scope.updateNumber = function () {
    $scope.number += 1;
    alert('new number should display ' + $scope.number);
  }
}

HTML:

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

这里有一个小提琴 ,没有jQuery的,它显示了建立捣鼓角的“正常方式”。



文章来源: The view is not updated when the model updates in AngularJS