切换AngularJS版本后代码失效问题求助
解决AngularJS版本切换后$http代码失效的问题
嘿,我猜你大概率是升级到了AngularJS 1.4及以上的版本吧?这问题我之前也碰到过——新版本里直接移除了$http.success()和$http.error()这两个老方法,换成了符合Promise标准的then()和catch()语法,这就是代码失效的核心原因。
核心修改点
- 把
success()替换成then(),回调函数的参数会变成一个完整的响应对象,你需要通过response.data来获取原来的返回数据 - 把
error()替换成catch(),用来处理请求失败的情况 - 如果是升级到1.6+,更推荐用模块化的方式注册控制器,而不是全局函数(虽然全局函数暂时还能跑,但不符合规范)
修改后的完整代码
angular.module('list', []) // 推荐用.controller方法注册控制器,替代全局函数 .controller('ListCtrl', function($scope, $http) { $http({ method: 'GET', url: 'json_price_1.json' }).then(function(response) { // 从响应对象中取出数据 var data = response.data; $scope.artists = data.artists; $scope.albums = []; // 保留你原来的遍历逻辑 angular.forEach(data.artists, function(artist) { angular.forEach(artist.albums, function(album){ $scope.albums.push(album); // 补全你没写完的push操作 }); }); }).catch(function(error) { // 这里可以添加错误处理逻辑,比如打印日志或者提示用户 console.error('加载数据失败:', error); }); });
额外提醒
如果你的项目还在用全局函数注册控制器(像原来的function ListCtrl(...)),在新版本的AngularJS里可能会遇到严格模式下的报错,或者模块化打包时的问题,所以尽量改成.controller()的注册方式更稳妥。
内容的提问来源于stack exchange,提问作者user2866865
相关产品推荐
相关产品推荐

