Angularjs $resolved:角度JS响应中为false
我正在设置一个使用Django REST API的Angular JS应用程序。Angularjs $resolved:角度JS响应中为false,angularjs,django-rest-framework,Angularjs,Django Rest Framework,我正在设置一个使用Django REST API的Angular JS应用程序。 我想显示教室的HTML列表。 这是我的模板 <body> <div ng-app="schoolApp" ng-controller="schoolCtrl"> <table class="table table-striped"> <thead> <tr>
我想显示教室的HTML列表。
这是我的模板
<body>
<div ng-app="schoolApp" ng-controller="schoolCtrl">
<table class="table table-striped">
<thead>
<tr>
<th>Classroom</th>
<th>School</th>
<th>Floor</th>
<th>Academic year</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="classroom in classrooms">
<td>{{classroom.classroom}}</td>
<td>{{classroom.school.school_name}}</td>
<td>{{classroom.floor}}</td>
<td>{{classroom.academic_year}}</td>
</tr>
</tbody>
</table>
</div>
</body>
问题是,我想,我得到了-我可以在控制台中看到-,$resolved:false
我如何解决这个问题?
更新: 考虑到我无法解决这个问题,我在想,也许我在其他方面做得很糟糕,比如。。。视图?
这就是我得到的
class HomePageView(TemplateView):
template_name = 'school_app/base.html'
class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer
class ClassroomViewSet(viewsets.ModelViewSet):
queryset = Classroom.objects.all()
serializer_class = ClassroomSerializer
也许我必须在HomePageView中添加一些内容,或者用另一种方式进行设置
更新:
这是我在控制台上调试器“开”时得到的结果
实际上,整个Json响应。当您调用$resource的查询时,它返回一个对$resolved=false的对象或数组的引用,直到RESTAPI调用完成并填充您的对象。因此,$resolved=false可能是正确的,表示您尚未收到数据 这是一个 控制器是:
app.controller('schoolCtrl', function($scope, Classroom) {
var vm = this;
vm.name = 'World';
Classroom.query().$promise.then(function(data) {
console.log('Success: '+JSON.stringify(data));
vm.classrooms = data;
}, function (reason) {
console.log('ERROR: '+JSON.stringify(reason));
});
});
这是我为调试RESTWebAPI所做的。。。通话正常后,您可以切换到更轻的版本:
app.controller('schoolCtrl', function($scope, Classroom) {
var vm = this;
vm.name = 'World';
vm.classrooms = Classroom.query();
});
我创建了一个教室JSON(猜测您的格式):
以及HTML:
<body ng-controller="schoolCtrl as vm">
<p>Hello {{vm.name}}!</p>
<div>
<table class="table table-striped">
<thead>
<tr>
<th>Classroom</th>
<th>School</th>
<th>Floor</th>
<th>Academic year</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="classroom in vm.classrooms">
<td>{{classroom.classroom}}</td>
<td>{{classroom.school.school_name}}</td>
<td>{{classroom.floor}}</td>
<td>{{classroom.academic_year}}</td>
</tr>
</tbody>
</table>
</div>
</body>
请注意,我使用var vm=this和ControllerAs语法来避免任何范围问题
关于文档中的ngResource:“重要的是要认识到调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,现有引用将填充实际数据。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图进行渲染。如果对象为空,则不会进行渲染,一旦数据从服务器到达,则对象将填充数据,并且视图自动重新呈现自身,显示新数据。这意味着在大多数情况下,不必为操作方法编写回调函数。”
让我们知道这是否有帮助。
$resolved
应该由Angular自动设置为true
,前提是您的REST API请求成功。通过与另一个客户机直接点击来检查API调用是否有效。另外,您不需要在then()
中进一步查询,$scope.questions=data代码>语句应该足够了。感谢您提供的解决方案,但它无论如何都不起作用。通过在控制器上调用debuged,我在控制台中获得了所有数据——就像我以前做的那样——但是模板没有呈现数据。这可能是我在风景中错过的东西吗?我正在更新这个问题,如果你能再看一次的话。你能分享一下你在控制台上看到的吗?这将有助于发现视图中的问题。谢谢你回答这个问题。
app.controller('schoolCtrl', function($scope, Classroom) {
var vm = this;
vm.name = 'World';
vm.classrooms = Classroom.query();
});
[
{"classroom":"0", "school": {"school_name":"anc"} },
{"classroom":"1", "school": {"school_name":"Sorbonee"} }
]
<body ng-controller="schoolCtrl as vm">
<p>Hello {{vm.name}}!</p>
<div>
<table class="table table-striped">
<thead>
<tr>
<th>Classroom</th>
<th>School</th>
<th>Floor</th>
<th>Academic year</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="classroom in vm.classrooms">
<td>{{classroom.classroom}}</td>
<td>{{classroom.school.school_name}}</td>
<td>{{classroom.floor}}</td>
<td>{{classroom.academic_year}}</td>
</tr>
</tbody>
</table>
</div>
</body>
app.factory('Classroom', ['$resource', function($resource) {
return $resource('classrooms?format=json', {}, {
query: {
method: 'GET',
isArray: true,
}
});
}]);