Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs中的$resource无法正常工作_Javascript_Rest_Angularjs - Fatal编程技术网

Javascript angularjs中的$resource无法正常工作

Javascript angularjs中的$resource无法正常工作,javascript,rest,angularjs,Javascript,Rest,Angularjs,我试图将angular与django结合使用我已经用django tastypie实现了一个REST api, 以下是角度资源的代码: angular.module('CourseServices', ['ngResource']). factory('Course', function($resource){ return $resource('api/v1/course/:courseId/?format=json', {}, { query: {method:'GET'

我试图将angular与django结合使用我已经用django tastypie实现了一个REST api, 以下是角度资源的代码:

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

所以我有我想要的数据,但是当我试图访问我的控制器中的“course.id”时,我没有定义!我不知道为什么!REST服务器响应是json。

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

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

基本上,你在这里面临的是一个时间问题。要解决此问题,可以在调用
query
方法时使用回调,如下所示:

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

因此,再次强调:
$resource
方法仍然是异步的,即使语法可能会建议其他方法。如果要确保数据准备就绪,您需要处理成功回调中的数据。

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

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

基本上,你在这里面临的是一个时间问题。要解决此问题,可以在调用
query
方法时使用回调,如下所示:

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

因此,再次强调:
$resource
方法仍然是异步的,即使语法可能会建议其他方法。如果要确保数据已准备就绪,则需要处理成功回调中的数据。

确实$resource是异步的,但您可以绕过它将其转换为延迟值对象,看,这可能会对您有所帮助。

确实$resource是异步的,但您可以绕过它将其转换为延迟值对象,听着,这可能会对您有所帮助。

那么,我应该始终将REST提供的数据绑定到回退函数中的视图吗?那么,我应该始终将REST提供的数据绑定到回退函数中的视图吗?