AngularJs $http变量未定义
AngularJs $http variable undefined
I have ng-controller
groupifyApp.controller('DashboardCtrl', function ($rootScope, $scope, $routeParams, $route, $http) {
$scope.page = {title:"Preferences", dashboardActive: "active", manageActive: "", inboxActive:"", preferencesActive:""};
$scope.user = {};
//$scope.user = {"name":"Test User","cal":{"entries":[{"id":0,"day":0,"start":1.25,"duration":1.0},{"id":1,"day":0,"start":4.0,"duration":1.75},{"id":2,"day":0,"start":4.75,"duration":0.5},{"id":3,"day":0,"start":5.75,"duration":0.75},{"id":4,"day":0,"start":6.5,"duration":0.25},{"id":5,"day":0,"start":7.5,"duration":0.25},{"id":6,"day":0,"start":9.5,"duration":1.75},{"id":7,"day":0,"start":10.75,"duration":0.5},{"id":8,"day":0,"start":11.75,"duration":0.75},{"id":9,"day":1,"start":0.75,"duration":0.5},{"id":10,"day":1,"start":1.25,"duration":0.25},{"id":11,"day":1,"start":2.0,"duration":0.5},{"id":12,"day":1,"start":2.75,"duration":0.5},{"id":13,"day":1,"start":3.5,"duration":0.25},{"id":14,"day":1,"start":4.5,"duration":0.5},{"id":15,"day":1,"start":6.5,"duration":1.5},{"id":16,"day":1,"start":7.75,"duration":0.75},{"id":17,"day":1,"start":8.25,"duration":0.25},{"id":18,"day":1,"start":11.25,"duration":0.5},{"id":19,"day":2,"start":0.0,"duration":0.25},{"id":20,"day":2,"start":1.25,"duration":0.75},{"id":21,"day":2,"start":1.75,"duration":0.25},{"id":22,"day":2,"start":2.5,"duration":0.5},{"id":23,"day":2,"start":4.25,"duration":1.25},{"id":24,"day":2,"start":5.75,"duration":0.75},{"id":25,"day":2,"start":6.75,"duration":0.75},{"id":26,"day":2,"start":7.75,"duration":0.75},{"id":27,"day":2,"start":9.0,"duration":1.0},{"id":28,"day":2,"start":9.75,"duration":0.25},{"id":29,"day":2,"start":10.75,"duration":0.5},{"id":30,"day":3,"start":0.25,"duration":0.5},{"id":31,"day":3,"start":0.75,"duration":0.25},{"id":32,"day":3,"start":1.25,"duration":0.25},{"id":33,"day":3,"start":2.5,"duration":0.5},{"id":34,"day":3,"start":3.5,"duration":0.75},{"id":35,"day":3,"start":4.0,"duration":0.25},{"id":36,"day":3,"start":4.75,"duration":0.5},{"id":37,"day":3,"start":5.5,"duration":0.5},{"id":38,"day":3,"start":6.0,"duration":0.25},{"id":39,"day":3,"start":6.5,"duration":0.25},{"id":40,"day":3,"start":7.25,"duration":0.25},{"id":41,"day":3,"start":8.0,"duration":0.5},{"id":42,"day":3,"start":8.5,"duration":0.25},{"id":43,"day":3,"start":9.5,"duration":0.75},{"id":44,"day":3,"start":10.75,"duration":0.5},{"id":45,"day":3,"start":11.25,"duration":0.25},{"id":46,"day":3,"start":11.75,"duration":0.25},{"id":47,"day":4,"start":1.5,"duration":1.5},{"id":48,"day":4,"start":2.0,"duration":0.25},{"id":49,"day":4,"start":3.25,"duration":0.5},{"id":50,"day":4,"start":4.0,"duration":0.25},{"id":51,"day":4,"start":4.75,"duration":0.25},{"id":52,"day":4,"start":7.25,"duration":2.0},{"id":53,"day":4,"start":7.75,"duration":0.25},{"id":54,"day":4,"start":8.25,"duration":0.25},{"id":55,"day":4,"start":9.75,"duration":0.75},{"id":56,"day":4,"start":11.0,"duration":0.25}]},"age":-1900,"username":"testUser","id":0};
$scope.user = function() { return getFullUser($http)};
alert(JSON.stringify($scope.user));
});
和一个函数
function getFullUser($http) {
return
$http({method: "GET", url: "api/user", headers: {
'Content-Type': 'application/json', 'token': localStorage.token}})
.success(function(data) {
return data;
});
}
我在这里发现了一个类似的问题在这里输入链接描述但无法将其解决方案映射到我的问题
当$scope.user被我的getFullUser函数引用时,它变得未定义。当我使用静态对象(注释掉的行)时,它可以正常工作。
但是 response.data 与静态版本相同。我将其结构与JSON.stringify(response.data)进行了比较。
你知道为什么$scope.user仍然没有定义吗?
函数和控制器位于 2 个不同的文件中,我不想将它们合并在一起。
所以重复的答案无济于事。
谢谢
你有几个问题。
- 我不认为你的代码真的是你发布的。 无论您遇到什么其他问题,发布的代码都会定义变量
$http
. - 您不是将
$scope.user
设置为用户(如注释掉的代码那样),不是获取用户的承诺(这是明智的),而是将返回获取用户的承诺的函数。
重新检查您的代码,找出您错放了一些大括号的位置。
因此,在阅读了几个小时有关 AJAX 调用和异步编程的信息后,我想通了。我把它留给任何可能被卡住的人。再次感谢@PSL让我走上正轨。
过了一会儿,试图解决我的问题,我最终得到了这个:
groupifyApp.controller('DashboardCtrl', function ($rootScope, $scope, $routeParams, $route, $http) {
$scope.page = {title:"Preferences", dashboardActive: "active", manageActive: "", inboxActive:"", preferencesActive:""};
$scope.user = {};
//$scope.user = {"name":"Test User","cal":{"entries":[{"id":0,"day":0,"start":1.25,"duration":1.0},{"id":1,"day":0,"start":4.0,"duration":1.75},{"id":2,"day":0,"start":4.75,"duration":0.5},{"id":3,"day":0,"start":5.75,"duration":0.75},{"id":4,"day":0,"start":6.5,"duration":0.25},{"id":5,"day":0,"start":7.5,"duration":0.25},{"id":6,"day":0,"start":9.5,"duration":1.75},{"id":7,"day":0,"start":10.75,"duration":0.5},{"id":8,"day":0,"start":11.75,"duration":0.75},{"id":9,"day":1,"start":0.75,"duration":0.5},{"id":10,"day":1,"start":1.25,"duration":0.25},{"id":11,"day":1,"start":2.0,"duration":0.5},{"id":12,"day":1,"start":2.75,"duration":0.5},{"id":13,"day":1,"start":3.5,"duration":0.25},{"id":14,"day":1,"start":4.5,"duration":0.5},{"id":15,"day":1,"start":6.5,"duration":1.5},{"id":16,"day":1,"start":7.75,"duration":0.75},{"id":17,"day":1,"start":8.25,"duration":0.25},{"id":18,"day":1,"start":11.25,"duration":0.5},{"id":19,"day":2,"start":0.0,"duration":0.25},{"id":20,"day":2,"start":1.25,"duration":0.75},{"id":21,"day":2,"start":1.75,"duration":0.25},{"id":22,"day":2,"start":2.5,"duration":0.5},{"id":23,"day":2,"start":4.25,"duration":1.25},{"id":24,"day":2,"start":5.75,"duration":0.75},{"id":25,"day":2,"start":6.75,"duration":0.75},{"id":26,"day":2,"start":7.75,"duration":0.75},{"id":27,"day":2,"start":9.0,"duration":1.0},{"id":28,"day":2,"start":9.75,"duration":0.25},{"id":29,"day":2,"start":10.75,"duration":0.5},{"id":30,"day":3,"start":0.25,"duration":0.5},{"id":31,"day":3,"start":0.75,"duration":0.25},{"id":32,"day":3,"start":1.25,"duration":0.25},{"id":33,"day":3,"start":2.5,"duration":0.5},{"id":34,"day":3,"start":3.5,"duration":0.75},{"id":35,"day":3,"start":4.0,"duration":0.25},{"id":36,"day":3,"start":4.75,"duration":0.5},{"id":37,"day":3,"start":5.5,"duration":0.5},{"id":38,"day":3,"start":6.0,"duration":0.25},{"id":39,"day":3,"start":6.5,"duration":0.25},{"id":40,"day":3,"start":7.25,"duration":0.25},{"id":41,"day":3,"start":8.0,"duration":0.5},{"id":42,"day":3,"start":8.5,"duration":0.25},{"id":43,"day":3,"start":9.5,"duration":0.75},{"id":44,"day":3,"start":10.75,"duration":0.5},{"id":45,"day":3,"start":11.25,"duration":0.25},{"id":46,"day":3,"start":11.75,"duration":0.25},{"id":47,"day":4,"start":1.5,"duration":1.5},{"id":48,"day":4,"start":2.0,"duration":0.25},{"id":49,"day":4,"start":3.25,"duration":0.5},{"id":50,"day":4,"start":4.0,"duration":0.25},{"id":51,"day":4,"start":4.75,"duration":0.25},{"id":52,"day":4,"start":7.25,"duration":2.0},{"id":53,"day":4,"start":7.75,"duration":0.25},{"id":54,"day":4,"start":8.25,"duration":0.25},{"id":55,"day":4,"start":9.75,"duration":0.75},{"id":56,"day":4,"start":11.0,"duration":0.25}]},"age":-1900,"username":"testUser","id":0};
getFullUser($http, $scope.user);
//$scope.slots = $scope.user.slots;
alert(JSON.stringify($scope.user));
});
和我的功能
function getFullUser($http, user) {
$http({method: "GET", url: "api/user", headers: {
'Content-Type': 'application/json', 'token': localStorage.token}})
.then(function(result) {
user = result.data;
alert(JSON.stringify(user));
});
}
请注意,它们都在 2 个不同的文件中,因此仅调用 $scope.user = result.data;
不是一种选择。
我真的不确定这是如何工作的,因为在其他编程语言中,如 C#、Java 等,我的 getFullUser 函数只会在自己的范围内更改其变量用户,并且不会在外部发生任何事情。
然后,在阅读了回调和其他解决方案之后,我想出了不交出诸如user之类的变量的想法,而是交出一个函数setUserCallback,该函数将在结果ist从我的RestService获取时执行。
所以我最终得到了这个(效果很好):
groupifyApp.controller('DashboardCtrl', function ($rootScope, $scope, $routeParams, $route, $http) {
$scope.page = {title:"Preferences", dashboardActive: "active", manageActive: "", inboxActive:"", preferencesActive:""};
$scope.user = {};
//$scope.user = {"name":"Test User","cal":{"entries":[{"id":0,"day":0,"start":1.25,"duration":1.0},{"id":1,"day":0,"start":4.0,"duration":1.75},{"id":2,"day":0,"start":4.75,"duration":0.5},{"id":3,"day":0,"start":5.75,"duration":0.75},{"id":4,"day":0,"start":6.5,"duration":0.25},{"id":5,"day":0,"start":7.5,"duration":0.25},{"id":6,"day":0,"start":9.5,"duration":1.75},{"id":7,"day":0,"start":10.75,"duration":0.5},{"id":8,"day":0,"start":11.75,"duration":0.75},{"id":9,"day":1,"start":0.75,"duration":0.5},{"id":10,"day":1,"start":1.25,"duration":0.25},{"id":11,"day":1,"start":2.0,"duration":0.5},{"id":12,"day":1,"start":2.75,"duration":0.5},{"id":13,"day":1,"start":3.5,"duration":0.25},{"id":14,"day":1,"start":4.5,"duration":0.5},{"id":15,"day":1,"start":6.5,"duration":1.5},{"id":16,"day":1,"start":7.75,"duration":0.75},{"id":17,"day":1,"start":8.25,"duration":0.25},{"id":18,"day":1,"start":11.25,"duration":0.5},{"id":19,"day":2,"start":0.0,"duration":0.25},{"id":20,"day":2,"start":1.25,"duration":0.75},{"id":21,"day":2,"start":1.75,"duration":0.25},{"id":22,"day":2,"start":2.5,"duration":0.5},{"id":23,"day":2,"start":4.25,"duration":1.25},{"id":24,"day":2,"start":5.75,"duration":0.75},{"id":25,"day":2,"start":6.75,"duration":0.75},{"id":26,"day":2,"start":7.75,"duration":0.75},{"id":27,"day":2,"start":9.0,"duration":1.0},{"id":28,"day":2,"start":9.75,"duration":0.25},{"id":29,"day":2,"start":10.75,"duration":0.5},{"id":30,"day":3,"start":0.25,"duration":0.5},{"id":31,"day":3,"start":0.75,"duration":0.25},{"id":32,"day":3,"start":1.25,"duration":0.25},{"id":33,"day":3,"start":2.5,"duration":0.5},{"id":34,"day":3,"start":3.5,"duration":0.75},{"id":35,"day":3,"start":4.0,"duration":0.25},{"id":36,"day":3,"start":4.75,"duration":0.5},{"id":37,"day":3,"start":5.5,"duration":0.5},{"id":38,"day":3,"start":6.0,"duration":0.25},{"id":39,"day":3,"start":6.5,"duration":0.25},{"id":40,"day":3,"start":7.25,"duration":0.25},{"id":41,"day":3,"start":8.0,"duration":0.5},{"id":42,"day":3,"start":8.5,"duration":0.25},{"id":43,"day":3,"start":9.5,"duration":0.75},{"id":44,"day":3,"start":10.75,"duration":0.5},{"id":45,"day":3,"start":11.25,"duration":0.25},{"id":46,"day":3,"start":11.75,"duration":0.25},{"id":47,"day":4,"start":1.5,"duration":1.5},{"id":48,"day":4,"start":2.0,"duration":0.25},{"id":49,"day":4,"start":3.25,"duration":0.5},{"id":50,"day":4,"start":4.0,"duration":0.25},{"id":51,"day":4,"start":4.75,"duration":0.25},{"id":52,"day":4,"start":7.25,"duration":2.0},{"id":53,"day":4,"start":7.75,"duration":0.25},{"id":54,"day":4,"start":8.25,"duration":0.25},{"id":55,"day":4,"start":9.75,"duration":0.75},{"id":56,"day":4,"start":11.0,"duration":0.25}]},"age":-1900,"username":"testUser","id":0};
getFullUser($http, function(data) {
$scope.user = data;
});
//$scope.slots = $scope.user.slots;
alert(JSON.stringify($scope.user));
});
和我的功能:
function getFullUser($http, setUserCallback) {
$http({method: "GET", url: "api/user", headers: {
'Content-Type': 'application/json', 'token': localStorage.token}})
.then(function(result) {
setUserCallback(result.data);
});
}
我不习惯这种回调的思维方式。事先定义方法应该做什么是一个新的概念。
- Socket.IO未定义变量
- 更改 Javascript 对象中所有未定义变量的值
- coffeescript,类未定义变量
- 使用下划线未定义变量时发生抛出/捕获错误
- 网络浏览器正在成为“;严格的“;用于Javascript中未定义变量的操作
- 使用window.location时未定义变量
- 传递给数据的未定义变量
- bizzare未定义变量
- JavaScript 中全局范围内存在未定义变量的原因是什么?
- JavaScript onClick 参数表示未定义变量
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 对于循环错误:未捕获的引用错误,未定义变量.怎么了
- JavaScript / YouTube API - 未定义变量 YT
- 未捕获的引用错误:在测试真实性时未定义变量
- 通过使用JavaScript“未定义”(变量),我们可以释放系统内存
- 与未定义变量相关的错误
- Angularjs 控制器中的未定义变量
- 角度解析:未定义变量
- BackboneJS Uncaught ReferenceError:未定义变量
- 使用Underscore JS部分和for循环的未定义变量对象