我正在尝试构建我的第一个角度应用程序,我可能需要一些帮助.
我正在使用标准的$ resource操作访问REST服务:
angular.module('wtrack', ['ngResource']).
factory('WtrackAPI', function($resource) {
var WtrackAPI = $resource('http://hostname/wtrack/api/w/:id');
return WtrackAPI;
});
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
function ListCtrl($scope, $timeout, WtrackAPI){
$scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view
$scope.addEntry = function() { // adding an object to the list
console.log("Adding Entry");
var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
WtrackAPI.save(entry,
function(){console.log("WTF do I need to do here to rerun WtrackAPI.query()");});
};
}
Run Code Online (Sandbox Code Playgroud)
我想要做的基本上是$scope.wdata = WtrackAPI.query();在save()完成后再次执行更新我的模型.我怀疑角度方式只是$scope.wdata.push(entry),但在这种情况下,数据库将一些数据添加到带有触发器的条目并进行一些复杂的排序,所以我真的想要使用查询来往返并重新加载整个列表.我怎样才能做到这一点?只是调用$scope.wdata = WtrackAPI.query();save回调不起作用,因为$ scope显然不存在.我用$ emit和$ rootScope等尝试了一些其他的东西,但所有这些让我真的很困惑.所以,请问,任何人都可以给我一个暗示,正确的方法是什么?
接受的答案会瞬间给你一个空白模型.我推荐这个更清洁的模型更新:
function ListCtrl($scope, $timeout, WtrackAPI){
$scope.queryWData = function() {
WtrackAPI.query(function(response){
// set the wdata here, in the callback
$scope.wdata = response;
})
};
$scope.addEntry = function() { // adding an object to the list
console.log("Adding Entry");
var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
WtrackAPI.save(entry,
function(){
$scope.queryWData();
});
};
$scope.queryWData();
}
Run Code Online (Sandbox Code Playgroud)
我建议不要设置$scope.wdata等于$resource直接,因为在该资源响应之前,你将$ scope.wdata留空.在模型实际更新之前,这将导致大量空白内容.
为了纠正这个问题,我们设置$scope.wdata了$resource回调函数