javascript - AngularJS - 使用异步响应更新范围值

标签 javascript angularjs

我正在尝试在 AngularJS Controller 之间共享一些数据。我也通过http请求获取数据。当我从 Controller 访问数据时,它为空,稍后(如果通过 UI 手动刷新),数据可用。我猜这个问题与 here 非常相似 但无论我在我的案例中尝试过什么,都没有用。请看 fiddle

http://plnkr.co/edit/6SkzXK?p=preview

因此,在 Controller 中我通过以下方式获取数据

//myService.setName(); //commented as it breaks the code

通过getName()设置service和access中的值

它很可能可以通过 $rootScope.$apply 解决,就像上面的链接一样,但我无法让它工作。

最佳答案

问题在于,当您的 Controller 初始化时,您将 getName() 的结果复制到变量 $scope.name = myService.getName()。由于 $scope.name 持有一个字符串而不是一个引用,因此当 getName() 更改时它不会更新。

有 3 种方法可以解决这个问题。

  1. 制作 $scope.name = myService.getName 并将其用作函数 Hello {{name()}}
  2. myService.getName() 返回一个像 { real_name: "foo"} 的对象并在 View 上使用 name.real_name
  3. myService 绑定(bind)到范围并直接使用 getName 函数 $scope.myService = myService; 和 View myService。 getName()

我更喜欢第一种,给出的更清晰。当您有更多数据时,第二个很好。在我看来,第三种方法不是一个好方法。

关于javascript - AngularJS - 使用异步响应更新范围值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502237/

相关文章:

javascript - AngularJS 从表中收集数据 - 解析为 JSON

session - 如何使用 angular-http-auth 保持 session ?

javascript - 如何在 angularjs 中使用 ng-repeat 显示 JSON 数组?

javascript - 如何在javascript中获取td内部列表的值

javascript - redux saga 和 history.push

javascript - 子div在css中影响父div并触发jquery方法

angularjs - 错误: [$controller:ctrlreg] Angular js code does not working properly

angularjs - Angular Material 复选框 - 将功能添加到 ng-checked

javascript - 如何更改由 JavaScript 函数生成的 docx 中的字体

javascript - Flux 架构比 MVC 有何优势