Javascript angularjs中的$resource无法正常工作
我试图将angular与django结合使用我已经用django tastypie实现了一个REST api, 以下是角度资源的代码: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.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提供的数据绑定到回退函数中的视图吗?