AngularJs解析Promise的响应(UI.Router + $ http.get)

时间:2015-02-26 16:25:04

标签: angularjs asynchronous angular-promise

apothekenService.getApotheke返回一个承诺。 promise中的response.data是一个正确传递的json对象,我可以在第一个console.log中看到它。

如何在解析中将此json对象转换为我的变量?当我在控制器中执行相同操作时,我只使用$ scope并在响应中绑定变量,但在这种情况下,我没有范围。

angular.module("test", ["ngAnimate", "ngCookies", "ngTouch", "ngSanitize", "ngResource", "ui.router", "ui.bootstrap", "ui.bootstrap.showErrors", "myApothekenService"]).config(function($stateProvider, $urlRouterProvider, $uiViewScrollProvider, showErrorsConfigProvider) {
  $uiViewScrollProvider.useAnchorScroll;
  return $stateProvider.state("root", {
    abstract: true,
    controller: "RootCtrl",
    resolve: {
      Apotheke: function(apothekenService) {
        this.apo = {};
        apothekenService.getApotheke().then(function(response) {
          console.log(response.data);
          return this.apo = response.data;
        });
        console.log(this.apo);
        return this.apo;
      }
    }
  });
}).controller("RootCtrl", function($scope, $location, $anchorScroll, Apotheke) {
  $scope.apotheke = Apotheke;
  console.log($scope.apotheke);
});

1 个答案:

答案 0 :(得分:1)

你知道在promise解析函数(然后)中的这个与父解析函数中的 this 不同。如果你想使用这种模式,通常的惯例是在局部变量 self 中捕获 this ,并在整个解析函数中使用它。

但无论如何,我会这样做。这样,控制器代码就不会执行,直到解析了解决方案。

  Apotheke: function(apothekenService) {
    return apothekenService.getApotheke();
  }**