模型更新时,无法让Angularjs更新视图

时间:2014-07-01 03:26:25

标签: javascript angularjs view model

我是一个角色新手而且我被卡住了。我在jsbin.com上有一些代码--->(http://jsbin.com/ratageza/7/edit?html,js,output

它不漂亮,但它基本上显示了我在做什么。 在我的实际代码中,我使用$ http.get调用RESTful后端来从数据库加载数据,并使用$ http.post调用来添加到数据库。就数据库提取和更新而言,一切正常。但是在使用“创建”表单创建新对象后,如果单击“全部列出”,则我的锦标赛对象不会更新。

我对在$ http.post电话后是否需要$ apply感到困惑?我尝试过使用它,但要么使用它错了,要么这不是我的问题。我看了很多stackoverflow,似乎无法找到我的问题的答案。

如果有人能看到我做错了什么,我真的很感激帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

查看我在此处所做的细微更改:http://jsbin.com/ratageza/8/edit?html,js,output

更改是您定义控制器使用情况的方式。您在两个不同的地方使用TournamentController,它实际上为您提供了两个独立的隔离范围的控制器实例。当“创建”视图绑定到完全不同的实例时,“列出所有”视图已绑定到一个实例。

另外,关于$的问题适用。作为一般规则,你应该很少使用$ apply,你永远不应该在控制器中使用它,因为它在那里使用是不安全的。指令实际上是使用$ apply的唯一安全的地方,即使只是在角度范围之外修改数据时也应该使用它。处理事物的顺序,您会发现如果在控制器中使用$ scope。$ apply(),您将经常获得有关已经处于摘要周期的异常。

答案 1 :(得分:0)

http://jsbin.com/ratageza/10/edit这有效。

这不是$ apply或$ diget问题。因为您将TournamentController放入部分视图中。一个是创造,另一个是展示。这是$ scope.tournament的另一个副本;

所以我添加一个div来包装Form和表。把控制器放在上面。删除表单和表格控制器。

希望这可以解决您的问题。 :)