如何在 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,因为控制器的范围是这个。
我是 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,因为控制器的范围是这个。