我正在尝试在 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 种方法可以解决这个问题。
- 制作
$scope.name = myService.getName
并将其用作函数Hello {{name()}}
。 - 让
myService.getName()
返回一个像{ real_name: "foo"}
的对象并在 View 上使用name.real_name
- 将
myService
绑定(bind)到范围并直接使用getName
函数$scope.myService = myService;
和 ViewmyService。 getName()
我更喜欢第一种,给出的更清晰。当您有更多数据时,第二个很好。在我看来,第三种方法不是一个好方法。
关于javascript - AngularJS - 使用异步响应更新范围值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502237/