Javascript AngularJS-使用异步响应更新范围值
我正在尝试在AngularJS控制器之间共享一些数据。我还通过http请求获取数据。当我从控制器访问数据时,它是空的,稍后(如果通过UI手动刷新),数据可用。我猜这个问题与 但无论我在我的案子里做了什么都没用。请看小提琴 所以,在控制器中,我通过Javascript AngularJS-使用异步响应更新范围值,javascript,angularjs,Javascript,Angularjs,我正在尝试在AngularJS控制器之间共享一些数据。我还通过http请求获取数据。当我从控制器访问数据时,它是空的,稍后(如果通过UI手动刷新),数据可用。我猜这个问题与 但无论我在我的案子里做了什么都没用。请看小提琴 所以,在控制器中,我通过 //myService.setName(); //commented as it breaks the code 它通过getName() 它很可能可以通过,$rootScope.$apply来解决,就像上面的链接一样,但我无法使它工作。问题是,当
//myService.setName(); //commented as it breaks the code
它通过getName()
它很可能可以通过,
$rootScope.$apply来解决,就像上面的链接一样,但我无法使它工作。问题是,当控制器初始化时,您将getName()的结果复制到一个变量$scope.name=myService.getName()
。由于$scope.name
保存的是字符串而不是引用,因此当getName()
发生更改时,它不会被更新
有三种方法可以解决这个问题
使$scope.name=myService.getName
并将其用作函数Hello{{{name()}
使myService.getName()
返回类似{real\u name:“foo”}
的对象,并在视图上使用name.real\u name
将myService
绑定到作用域并直接使用getName
函数$scope.myService=myService代码>和视图myService.getName()
我更喜欢第一种,因为它更清楚。当你有更多的数据时,第二个是好的。在我看来,第三种方法不是一种好方法。要让你的装备发挥作用,你需要做三件事:
将$http服务注入新服务
定义视图正在调用的getName()函数
将$scope传入setName()函数并更改$scope上的值
谢谢你,我也遇到过同样的问题,这对我的理解有很大帮助。