javascript - angularjs 中的 $resource 无法正常工作

标签 javascript rest angularjs

我正在尝试将 angular 与 django 一起使用我已经用 django tastypie 实现了一个 REST api, 这是 Angular 资源的代码:

angular.module('CourseServices', ['ngResource']).
    factory('Course', function($resource){
  return $resource('api/v1/course/:courseId/?format=json', {}, {
    query: {method:'GET', params:{courseId:'1'}, isArray:true}
  });
});

这是我试图获取它的地方:

var course = Course.get({courseId:$routeParams.courseId});
console.log(course);

此代码在浏览器中记录此内容:

Resource
course_pic: "http://localhost:8000/media/course_pics/2012/10/24/Apple-Launches-Genius-Recommendations-for-Apple-TV-2.png"
creation_time: "2012-10-24T06:28:11+00:00"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus cursus mi, in laoreet dolor placerat vitae. ."
id: "1"
instructor: "/api/v1/user/1/"
name: "Computation Theory"
resource_uri: "/api/v1/course/1/"
subscribers: 0
update_time: "2012-10-24T06:28:11+00:00"
__proto__: Resource

所以我有我想要的数据,但是当我尝试在我的 Controller 中访问例如“course.id”时,我得到了未定义的信息!我不知道为什么! REST 服务器响应是 json。

最佳答案

要解决您遇到的问题,我们需要先了解 $resource 的内部工作原理。有一个问题和一个更长的答案here ,但简而言之,我们需要意识到 $resource 执行异步调用,即使它的语法表明我们正在处理同步调用也是如此。

您的情况是当您尝试访问 Controller 中的查询数据时,这些数据尚未准备好。在调用 $resource 时,AngularJS 将只返回一个空对象(一种占位符),并且仅当响应从服务器返回时才会填充数据(属性)。

本质上,您在这里面临的是时间问题。要解决此问题,您可以在调用 query 方法时使用回调,大致如下:

var course; Course.get({courseId:$routeParams.courseId}, function(data){
    console.log(data);
    course = data;
    //course.id should be defined here 
});

所以,再一次:$resource 方法仍然是异步的,即使语法可能另有说明。如果要确保数据准备就绪,则需要在成功回调中处理数据。

关于javascript - angularjs 中的 $resource 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045771/

相关文章:

json - Angular 6 错误处理 - HttpErrorResponse 具有未定义状态

java - 找不到简单 Jersey Hello World 404 资源

javascript - 如何从 Angularjs 的本地存储数组中删除特定元素?

javascript - 更改颜色当前链接页面 Angular 和CSS

javascript - 如何使用node.js计算最大数量?

java - 如何从 onchange 事件调用 Controller 方法?

java - 使用 JSON POST 外来字符会产生 400

javascript - 如何从 Angular Yeoman 生成器中的列表中查看单个项目?

javascript - react : Cannot update during an existing state transition error

javascript - React Native - Firebase 凭据位于单独的文件中