在Angular中将一个控制器的承诺发送到另一个控制器

时间:2017-03-29 06:25:21

标签: angularjs angular-promise

在我的网络应用程序中,我想在开始时,在run方法中加载所有用户数据,并将数据传递给其他控制器,以便在仪表板中显示给用户。

假设我在服务器上有一个数据结构

data = {
  x : 30,
  y: 20
}

我想在一个http请求中获取它(而不是创建多个http请求并创建多个promise)

我在app的run方法中运行的http请求

service.getDataFromServer = function(){
  return $http.get('/admin/data').then(function(response) {
    data = response.data;
  });
};

这将创造一个承诺。

我想接受这个承诺并将其传递给其他要使用的控制器。

我的第一个问题是如何才能这样做,因此来自promise的数据将绑定到我要向用户显示的数据。

第二个问题是,在承诺解决之前,我可以使用结构字段吗? 例如

$scope.x = data.x

根据数据,我的意思是即将解决的数据

由于

1 个答案:

答案 0 :(得分:0)

  

我想在一个http请求中获取它(而不是创建多个http请求并创建多个promise)

从http调用获得响应后,将数据保存在工厂/服务中,这样,您可以通过注入它来在您的情况下使用在其他位置,如控制器,这是最推荐的。

  

我想接受这个承诺并将其传递给其他要使用的控制器。   我怎么能这样做,所以来自promise的数据将绑定到我将要向用户显示的数据。

进行http调用并保存承诺。

service.getDataFromServer = function() {

      var promise = $http.get('test.json');

      service.savePromise(promise);
    }

得到保存的承诺。

.controller('testCtrl', function(service) {

      service.getSavedPromise().then(function(response){
          console.log(response.data)
      })
  })

Plunker here

  

第二个问题是,在承诺解决之前,我可以使用结构字段吗?例如

$scope.x = data.x  

// data is still undefined as promise is not resolved.so,you will get TypeError

你可以在这里做得最好,你可以将data合并到现有的数据对象/数组中,因此,Angular双向绑定可以为你做其余的事情。