Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-使用异步响应更新范围值_Javascript_Angularjs - Fatal编程技术网

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

Javascript AngularJS-使用异步响应更新范围值,javascript,angularjs,Javascript,Angularjs,我正在尝试在AngularJS控制器之间共享一些数据。我还通过http请求获取数据。当我从控制器访问数据时,它是空的,稍后(如果通过UI手动刷新),数据可用。我猜这个问题与 但无论我在我的案子里做了什么都没用。请看小提琴 所以,在控制器中,我通过 //myService.setName(); //commented as it breaks the code 它通过getName() 它很可能可以通过,$rootScope.$apply来解决,就像上面的链接一样,但我无法使它工作。问题是,当

我正在尝试在AngularJS控制器之间共享一些数据。我还通过http请求获取数据。当我从控制器访问数据时,它是空的,稍后(如果通过UI手动刷新),数据可用。我猜这个问题与 但无论我在我的案子里做了什么都没用。请看小提琴

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

//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上的值

  • 谢谢你,我也遇到过同样的问题,这对我的理解有很大帮助。