为什么我得到未定义的变量
Why I'm getting the var undefined
>我正在尝试获取一个 Rest 数组,然后将其显示在我的 HTML 上。我面临的问题是,在我的工厂中,我能够获取数组并显示其内容,但不能在我的控制器中获取未定义的变量。 这是我的工厂
.factory('coursesService', function($resource) {
var service = {};
service.getAllCouses = function (){
var Courses = $resource("/myproject/rest/training/trainings");
var data = Courses.query().$promise.then(function(data)
{
service.data= data;
console.log("ligne 1: ", service.data[0].name);
console.log("ligne 1: ", service.data[0].creator);
console.log("ligne 2: ", data[1].name);
console.log("ligne 2: ", data[1].creator);
return service.data;
});
}
return service;
})
和我的控制器
.controller("CoursesController",
function CoursesController($scope, coursesService) {
var courses = {};
courses = coursesService.getAllCouses();
console.log("courses: ", courses);
})
结果我得到这个:
courses: undefined
ligne 1: Angular
ligne 1: Object {id: "1", username: "User1", email: "user1@gmail.com", password: "password", userProfile: Object}
ligne 2: JavaScript
ligne 2: Object {id: "1", username: "User1", email: "user1@gmail.com", password: "password", userProfile: Object}
为什么我得到课程:未定义?和不应该显示在我在工厂中显示的列表之后?
您的getAllCouses
函数从不返回任何内容,因此调用它总是会导致undefined
。对查询承诺then
处理程序的回调返回某些内容,但不返回getAllCouses
。
您需要让getAllCouses
返回承诺,然后在该承诺的then
处理程序中使用结果。你不能直接使用它的返回值,如果Courses.query()
是异步的,则不能(如果不是,为什么它返回一个承诺?
那看起来像这样:
.factory('coursesService', function($resource) {
var service = {};
service.getAllCouses = function (){
var Courses = $resource("/myproject/rest/training/trainings");
var data = Courses.query().$promise.then(function(data) {
service.data= data;
console.log("ligne 1: ", service.data[0].name);
console.log("ligne 1: ", service.data[0].creator);
console.log("ligne 2: ", data[1].name);
console.log("ligne 2: ", data[1].creator);
return service.data;
});
return data; // <=== Return the promise (`data` is a bit of a suspect name)
};
return service;
})
然后:
.controller("CoursesController", function CoursesController($scope, coursesService) {
coursesService.getAllCouses().then(function(courses) { // <=== Use the promise
console.log("courses: ", courses); // <===
}); // <===
})
。但我不是一个有棱角的人。
getAllCouses() 不返回值,它只设置两个局部变量,课程和数据。
Courses.query 承诺仅在 Web 请求完成后解析,因此这些日志会延迟。
我通过像这样更新我的服务和控制器来解决这个问题:
.factory('coursesService', function($resource) {
return $resource("/myproject/rest/training/trainings", {
query : {
method : "GET",
isArray : true
}
});
});
我刚刚添加了
isArray : true
我更新了控制器
.controller(
"CoursesController",
function UserController($scope, coursesService) {
coursesService.query(function(data) {
console.info("data: ", data)
console.log("1st course: ", data[0].name)
$scope.Courses = data;
});
我简单地用这种方式修复它:
.factory('coursesService', function($resource) {
return $resource("/myproject/rest/training/trainings")
})
和控制器:
.controller("coursesController", function($scope, coursesService) {
coursesService.query(function(data) {
$scope.Courses = data;
});
})
相关文章:
- Javascript变量未定义,onchange不起作用
- 定义的变量未定义
- 无法弄清楚为什么本机 Promise 变量未定义
- Windows 8 Javascript 疯狂 - 变量未定义
- $rootScope变量未定义
- 变量未定义
- Javascript:TypeError变量未定义
- 变量未定义/超出范围
- javascript变量未定义
- Javascript变量未定义错误
- $scope变量未定义,尽管它是在$watch函数内部设置的
- 类型错误:变量未定义
- AngularJs $http变量未定义
- JQuery:创建扩展返回变量未定义
- d3.js变量未定义,但在Firefox控制台中,它可以工作
- Javascript 中用于上传表单数据的变量未定义
- 节点.js模块级变量未定义
- Node.js req.session 变量未定义
- 错误:AngularJs 变量未定义,当使用 grunt 运行时.(泽泽尔)
- 将字符串拆分为两个变量 - 未定义不是一个函数