对于棱角分明的我来说还是比较新的,对于这个新问题我很抱歉,但我完全被难过了。
我正在尝试使用resolve
在路线更改时使用数据预加载我的控制器。我从服务器获取数据,我将解析对象注入控制器,但是有些东西无效。
这是ui-router的解析部分
resolve: {
categoryList: function ($http) {
$http.get('cfc/category.cfc?method=getCategories')
.success(function (data) {
return data;
});
}
},...
和控制器
app.controller('CategoryController', ['$scope', '$http', 'categoryList',
function ($scope, $http, categoryList) {...
有人可以解释我做错了吗?
答案 0 :(得分:3)
小细节:
resolve: {
categoryList: function ($http, $q) {
var defObj = $q.defer();
$http.get('cfc/category.cfc?method=getCategories')
.success(function (data) {
defObj.resolve(data);
});
return defObj.promise;
}
},...
发生的事情是您的承诺在您的控制器加载后解析,这意味着您的数据未被传入。通过添加延迟对象并将其返回,您可以将承诺的数据注入您的控制器AFTER它结算了,一切都应该是好的。此外,您可能希望使用错误处理程序处理$ http调用失败,并插入一些您可以在控制器中检测并作出反应的虚拟数据。
答案 1 :(得分:0)
实际上$http
默认返回一个承诺,所以你要做的就是
javascript
return $http.get( ...