如何在 angularjs 中访问承诺函数之外的对象

How to access object outside the promised function in angularjs

我是 angularjs 的新手,作为新手,我在访问函数之外的对象时遇到了问题。我创建了一个工厂:

    var injectParams = ['$http'];
    var address = function ($http) {
    var factory = {};

    factory.get = function () {
        return $http({
            method: "POST",
            url: '/address',
            headers: {
                'Content-Type': 'application/json'
            },
            data: {
                service: 'address'
            }
        });
    };
  return factory;
 }

和控制器方法:

   function getAddresses() {
        address_factory.get().then(function success(response) {
            $scope.billing = response.data.billing;
            $scope.shipping = response.data.shipping;
            console.log(response.data);

        }, function error(x) {
            console.log(x);
        });
    }
   getAddresses();

问题是如何在 getAddresses 函数之外访问 $scope.billing 对象?我已阅读 angularjs 中的承诺,但我不明白如何使用...

$scope 变量在 promise 之外在控制器中随处可用...

因此 $scope.billing 将可以在 html 和控制器 js 中访问...

$scope.billing 在控制器和绑定到该控制器的模板中的任何地方都可以访问。但是 $scope.billing 的值是动态的,它是 undefined 直到 factory-get Promise 被解决。要在模板中反映 $scope.billing 的动态特性,您可以尝试以下方法:

 function getAddresses() {
    $scope.loading = true;
    address_factory.get().then(function success(response) {
      $scope.billing = response.data.billing;
      $scope.loading = false;
      $scope.error = null;
    }, function error() {
      $scope.loading = false;
      $scope.error = true;
    });
  }
 getAddresses();

然后在模板中:

<div ng-if="loading">
  Loading...
</div>
<div ng-if="!loading && error">
  Got an error!
</div>
<div ng-if="!loading && !error">
  Billing: {{billing}}
</div>

此外,您可以在控制器中使用 $scope.$watch 来观察 $scope.billing 变化:

// ...
getAddresses();

$scope.$watch('billing', function() {
  // $scope.billing has been changed
  console.log($scope.billing);
});

但我建议在 Promise.then 调用的成功回调中正确执行所有必要的逻辑。

$scope表示当前作用域,即some-controller.js&[=17=的当前区域]some-view.html 可访问。

如果您将任何变量设置为 $scope,它将可以在 some-controller.js & some-view.html.[=11= 中的任何位置访问]

假设您将 ng-controller 设置为任何 div 作为 <div ng-controller="SomeController">.....</div>。因此,在控制器中设置了 $scope 的任何东西,如 $scope.something 都可以在控制器中访问,并且也可以使用这个 div,因为控制器的范围是这个。