2014-07-01 70 views
0

我是一名角度新手,我被卡住了。我在jsbin.com上有一些代码--->(http://jsbin.com/ratageza/7/edit?html,js,output无法让Angularjs在更新模型时更新视图

这不是很漂亮,但它显示了我在做什么。 在我的真实代码中,我使用$ http.get调用RESTful后端从数据库加载数据,并使用$ http.post调用来添加到数据库。所有工作都很好,只要数据库获取并更新即可。但是当我使用“创建”表单创建一个新对象后,如果我点击“全部列出”,我的锦标赛对象没有更新。

我很困惑在$ http.post调用后是否需要$ apply?我尝试过使用它,但是要么使用它错误或那不是我的问题在这里。我查看了周围的整个计算器,似乎无法找到我的问题的答案。

如果有人能看到我做错了什么,我会非常感谢帮助。

谢谢!

回答

1

退房我在这里做了细微的变化:http://jsbin.com/ratageza/8/edit?html,js,output

的变化是你如何定义你的控制器使用。您可以在两个不同的地方使用TournamentController,它们实际上为您提供了两个独立的范围的控制器实例。您的列表所有视图绑定到一个实例,而创建视图绑定到完全不同的实例。

此外,您的问题$适用。作为一般规则,你应该很少使用$ apply,并且你永远不要在控制器中使用它,因为在那里使用它是不安全的。指令是使用$ apply的唯一安全的地方,即使只有在角度范围之外修改数据的情况下才应该使用它。处理事物的顺序,你发现如果你在控制器中使用$ scope。$ apply(),你经常会遇到关于已经处于摘要循环的异常。

0

http://jsbin.com/ratageza/10/edit这个工程。

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

因此,我添加一个div来包装窗体和表格。把控制器放在它上面。删除窗体和表格控制器。

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