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

bsr*_*bsr 4 javascript angularjs

我试图在AngularJS控制器之间共享一些数据.我也通过http请求获取数据.当我从控制器访问数据时,它为空和稍后(如果通过UI手动刷新),则数据可用.我猜这个问题与这里非常相似 但是我在我的案例中尝试过的任何东西都没有用.请看小提琴

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

所以,在控制器中我得到了数据

//myService.setName(); //commented as it breaks the code
Run Code Online (Sandbox Code Playgroud)

它设定了服务和访问的价值 getName()

它最有可能通过,$rootScope.$apply如上面的链接解决,但我无法使其工作.

Ren*_*des 16

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

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

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

我更喜欢第一个,给出的更清楚.当你有更多数据时,第二个是好的.第三个不是我的意见的好方法.