我正在尝试将非结构化的 jQuery 应用程序转换为 MVC AngularJS,但有一次我有点迷茫或者我只是不明白......(不幸的是我不是 JavaScript-God 所以错误也可能在那里)
这是原始 jQuery 代码的片段。
$.ajax({
type: "GET",
url: "rest/users/" + userId + "/requests",
accept: "application/json; charset=utf-8",
statusCode: {
200: function(data) {
// do something
},
404: function() {
window.location = 'index.html';
},
500: function() {
alert("Server Error!");
}
}
});
一个简单的 REST 调用,其中使用 HTTP 响应代码进行导航。不幸的是,我无法在 AnglularJS 中运行它。
这是我的 Controller :
// Inside the RequestController
$scope.requests = RequestModel.getRequestsByUser($rootScope.currentUser.userId);
if($scope.requests.statusCode == 200) {
// do something
}
else if($scope.requests.statusCode == 404) {
$location.path('/notFound');
} else if ($scope.requests.statusCode == 500) {
$location.path('/error');
}; // PROBLEM: The if/else statement is never true since statusCode is not available
这是我的模型:
// Inside the RequestModel
this.getRequestsByUser = function(userId) {
var RequestResource = $resource('../rest/users/' + userId + "/requests");
var requestList = RequestResource.get({}, function(response, getResponseHeaders) {
// PROBLEM: The property "stausCode" is "unavilable" at the Controller even if it was set here
requestList.statusCode = 200;
console.log("SUCCESS: getRequestsByUser() -> StatusCode: requestList.statusCode");
console.log(requestList);
}, function(response, getResponseHeaders) {
requestList.statusCode = response.status;
console.log("FAILED: getRequestsByUser() -> StatusCode: " + response.status);
});
return requestList;
};
这不起作用,因为“statusCode”在我的 Controller 中“不可用”。 REST 调用有效,并且数据绑定(bind)到 View 也很好。我只是无法实现“导航部分”。我是否遗漏了 $watch 属性、异步行为或者我的方法不正确?!
感谢您的帮助!
最佳答案
您可以在您的服务中更好地利用资源参数映射:
// Inside service
this.requestsByUser = $resource('../rest/users/:userId/requests', {userId:'@userId'});
这样您就可以将相同的资源重复用于不同的休息操作(例如发布、删除)。
以及处理状态的 Controller 代码(响应处理程序已移至 Controller ):
// Inside the RequestController
$scope.requests = RequestModel.requestsByUser
.get(
{userId: $rootScope.currentUser.userId},
function(response) { // success handler
if(response.status == 200) {
// do something
}
},
function(response) { // error handler
if(response.status == 404) {
$location.path('/notFound');
} else if (response.status == 500) {
$location.path('/error');
}
}
);
另一种方法是使用 $q 服务从您的服务中返回 promise 。但提供的解决方案对我来说似乎更干净
关于javascript - 通过 HTTP 状态代码的 AngularJS 导航。 (MVC设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896380/