javascript - 在 Angular Promise 中使用 'Done' 而不是 'Success'

标签 javascript angularjs coffeescript angularjs-scope angular-promise

我在使用 Contentful.js 库检索 Angular 应用程序中的内容时遇到了问题。它使用带有 done(data) 的函数,而不是带有 success(data) 回调的普通 $http.get。我可以将 $scope.lists 值设置为返回的数据,但由于某种原因它没有显示在 HTML 中。

这适用于使用标准 $http 的详细 View :

$http.get('https://cdn.contentful.com/spaces/xxxxxxx/entries?sys.id=' + $routeParams.listId + '&include=10&access_token=xxxxxxxx').success (data) ->
            $scope.list = data
            console.log $scope.list

这不适用于使用 done() 方法的 ListView :

client = contentful.createClient
        accessToken: 'xxxxxxxx'
        space: 'xxxxxxxxx'

listControllers.controller('ListListCtrl', ['$scope', '$http', ($scope, $http) ->
    $scope.lists = ""
    client.entries({'content_type': 'xxxxxxxx', 'include': 1}).done (data) ->
        $scope.lists = data
        console.log $scope.lists
])

有什么想法吗?

最佳答案

很可能是因为这个库不是针对 AngularJS 的,所以它没有执行 $scope.$apply() 来触发摘要周期,因此 html 没有得到更新。

修复方法是使用 $scope.$apply() 将回调中完成的分配包装起来。JavaScript 对此的修复方法是

$scope.$apply(function() {
   $scope.lists = data
});

由于我没有使用这个库,所以我的 done 回调实现可能是错误的。

关于javascript - 在 Angular Promise 中使用 'Done' 而不是 'Success',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567113/

相关文章:

javascript - 如何在 Jest 中模拟 AbortController

javascript - 数据表标签搜索

javascript - 亚马逊 DynamoDB 和 AngularJS

javascript 对象 - 检索子类变量

javascript - Fullcalendar 仅在页面重新加载后出现

javascript - node.js、backbone、socket io 和 express 以及 coffeescript 都可以一起使用吗?

javascript - javascript中可以调用子方法吗?

javascript - 如何在不破坏 jquery 动画的情况下使用@keyframes 实现平滑的页面转换

javascript - 使用 Angular 创建 JSON 下载链接

javascript - AngularJS - 在 Controller 之间共享范围值