4

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

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

所以,在控制器中,我通过

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

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

它很可能可以通过 , 解决$rootScope.$apply,如上面的链接中所示,但我无法使其工作。

4

2 回答 2

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()

我更喜欢第一个,因为它更清楚。当您有更多数据时,第二个很好。在我看来,第三个不是一个好方法。

于 2012-09-19T20:45:59.980 回答
0

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

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

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

于 2012-09-19T21:17:19.413 回答