这似乎应该是将数据传递到我的范围,但事实并非如此,是否有任何直接跳出错误的代码如下?
angular.module('Lunch.services', [])
.factory 'LunchMates', ($q, $http) ->
LunchMates =
getLunchMates: () ->
d = $q.defer();
$http.get('/lunchers').then (response, status) ->
if response.status == 200
d.resolve(response.data)
return d.promise
return LunchMates
angular.module('Lunch.controllers', [])
.controller('LunchCtrl', ($scope, LunchMates) ->
$scope.lunchers = LunchMates.getLunchMates()
)
答案 0 :(得分:2)
此代码:$scope.lunchers = LunchMates.getLunchMates()
设置范围的承诺,它依赖于旧的弃用功能。
从版本> = 1.2 开始,承诺展开已弃用,这是breaking commit:
此提交禁用承诺展开和添加 $ parseProvider.unwrapPromises()getter / setter api允许开发人员 如果需要,重新打开该功能。 承诺展开支持 将来会从Angular中删除,此设置仅允许 在过渡期间启用它。
..........
以前承诺在表达式中的表达式中的任何位置找到 评估将在未解决时评估为未定义且未评估 履行价值,如果履行。
..........
BREAKING CHANGE :$解析和模板一般将不再 自动解包承诺。此功能已被弃用 如果绝对需要,可以在过渡期间重新启用 通过
$parseProvider.unwrapPromises(true)
api。
您仍然可以使用$parseProvider
启用它,如下所示:
angular.module('Lunch.controllers', [])
.config( ($parseProvider) ->
$parseProvider.unwrapPromises(true)
$parseProvider.logPromiseWarnings(false)
)
但它会在未来版本中破坏(如上所述),所以改为:
angular.module('Lunch.controllers', [])
.controller( 'LunchCtrl', ($scope, LunchMates) ->
LunchMates.getLunchMates().then (data)->
$scope.lunchers = data
)
这个问题(在其他一些问题中)很常见,主要是因为很多教程和新开发人员在网上找到的书籍是在1.2版之前编写的,因此不是最新的。始终与https://github.com/angular/angular.js/blob/master/CHANGELOG.md
保持同步