我正在尝试在AngularJS控制器之间共享一些数据。我也通过http请求获取数据。当我从控制器访问数据时,它为空和稍后(如果通过UI手动刷新),则数据可用。我猜这个问题与here非常相似 但无论我在我的情况下尝试过什么都行不通。请看小提琴
http://plnkr.co/edit/6SkzXK?p=preview
所以,在控制器中我通过
获取数据//myService.setName(); //commented as it breaks the code
通过getName()
最有可能通过$rootScope.$apply
来解决,就像上面的链接一样,但我无法使其发挥作用。
答案 0 :(得分:16)
问题是,当您的控制器初始化时,您将getName()的结果复制到变量$scope.name = myService.getName()
。由于$scope.name
持有字符串而不是引用,因此getName()
更改时不会更新。
有3种方法可以解决这个问题。
$scope.name = myService.getName
并将其用作函数Hello {{name()}}
。myService.getName()
返回{ real_name: "foo" }
之类的对象,并在视图中使用name.real_name
myService
绑定到范围,并直接使用getName
函数$scope.myService = myService;
和视图myService.getName()
我更喜欢第一种,给出的更清楚。当你有更多数据时,第二个是好的。第三个不是我的意见的好方法。
答案 1 :(得分:0)
要让你的傻瓜工作,你需要做三件事: