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

时间:2012-09-19 20:16:53

标签: javascript angularjs

我正在尝试在AngularJS控制器之间共享一些数据。我也通过http请求获取数据。当我从控制器访问数据时,它为空和稍后(如果通过UI手动刷新),则数据可用。我猜这个问题与here非常相似 但无论我在我的情况下尝试过什么都行不通。请看小提琴

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

所以,在控制器中我通过

获取数据
//myService.setName(); //commented as it breaks the code

通过getName()

设置服务和访问的值

最有可能通过$rootScope.$apply来解决,就像上面的链接一样,但我无法使其发挥作用。

2 个答案:

答案 0 :(得分:16)

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

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

  1. 制作$scope.name = myService.getName并将其用作函数Hello {{name()}}
  2. myService.getName()返回{ real_name: "foo" }之类的对象,并在视图中使用name.real_name
  3. myService绑定到范围,并直接使用getName函数$scope.myService = myService;和视图myService.getName()
  4. 我更喜欢第一种,给出的更清楚。当你有更多数据时,第二个是好的。第三个不是我的意见的好方法。

答案 1 :(得分:0)

要让你的傻瓜工作,你需要做三件事:

  1. 将$ http服务注入新服务
  2. 定义视图正在调用的getName()函数
  3. 将$ scope传递给setName()函数并更改$ scope
  4. 上的值

    http://plnkr.co/edit/6SkzXK