【发布时间】:2015-12-29 16:08:10
【问题描述】:
我愿意从 AngularJS 中的 $http 服务中获取一个值,并将其设置在 $scope.listing 中。因为这是异步操作 $scope.listing 在页面加载时为空。我看到了一些使用 promise 和 factory 来解决它的实现,但这对我来说感觉有点矫枉过正。有什么优雅的方法吗?
看起来是这样的:
$http.get('/getlisting/')
.success(function(response) {
$scope.listing = response;
})
console.log ($scope.listing) // is empty
【问题讨论】:
-
将 console.log 语句移动到成功处理程序中。当 promise 被解决时,它实际上会被调用。这不是矫枉过正,这是异步“东西”的工作原理
-
无法绕过承诺,因为 $http API 基于 $q 服务公开的延迟/承诺 API。至于在哪里进行调用,在服务中进行调用,尤其是在多个控制器中使用数据时,是普遍接受的方法。此外,.success 已被弃用,取而代之的是 .then
-
请缩小您的问题范围。顺便说一句,视图是在控制器运行之前编译的,因此,除非您深入了解 Angular,否则您将无法在数据初始化的情况下显示您的视图。
标签: javascript angularjs http asynchronous