【问题标题】:Can't get Angularjs to update view when model updates模型更新时无法让 Angularjs 更新视图
【发布时间】:2014-07-01 03:26:24
【问题描述】:

我是 Angular 新手,我被困住了。我在 jsbin.com 上有一些代码 --->(http://jsbin.com/ratageza/7/edit?html,js,output)

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

我对在 $http.post 调用之后是否需要 $apply 感到困惑?我尝试过使用它,但要么使用错误,要么这不是我的问题。我环顾了整个stackoverflow,似乎找不到我的问题的答案。

如果有人能看出我做错了什么,我将非常感谢您的帮助。

谢谢!

【问题讨论】:

    标签: javascript angularjs view model


    【解决方案1】:

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

    变化在于您定义控制器使用的方式。您在两个不同的地方使用 TournamentController,这实际上为您提供了该控制器的两个实例,具有两个独立的、隔离的范围。您的 List All 视图绑定到一个实例,而 Create 视图绑定到一个完全不同的实例。

    另外,关于 $apply 的问题。作为一般规则,你应该很少使用 $apply 并且你不应该在控制器中使用它,因为在那里使用它是不安全的。指令确实是使用 $apply 的唯一安全地方,即使在 Angular 范围之外修改数据时也应该使用指令。事情的处理顺序,你会发现如果你在控制器中使用 $scope.$apply() ,你会经常得到关于已经在摘要循环中的异常。

    【讨论】:

      【解决方案2】:

      http://jsbin.com/ratageza/10/edit 这行得通。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 2014-02-13
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多