我是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();
问题是如何在$scope.billing
函数之外访问getAddresses
对象?我已经阅读了angularjs中的承诺,但我不明白如何使用......
答案 0 :(得分:1)
$scope.billing
可在控制器中的任何位置访问,并且模板绑定到该控制器。但是$scope.billing
的值是动态的,它是undefined
,直到工厂获得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
电话的成功回调中做所有必要的逻辑。
答案 1 :(得分:0)
$ scope 表示当前范围,即 some-controller.js &amp; some-view.html 可以访问。
如果您将任何变量设置为 $ scope ,则可以在some-controller.js&amp ;;一些-view.html。
假设您将 ng-controller 设置为任何div <div ng-controller="SomeController">.....</div>
。因此,在控制器中设置$ scope.something等$ scope的任何东西都可以在控制器中访问并且也可以使用这个div,因为控制器的范围是这样的。