【发布时间】:2015-06-02 10:12:51
【问题描述】:
我对使用 angular v1.3.15 和 ui-router v0.2.8 的 Ui-router 有疑问。我已经设置了嵌套状态的路由,并且我正在解决使用数据加载视图的承诺,到目前为止一切都很好。 当我解决一个承诺以显示以前保存的“工作”并尝试通过 POST 请求添加新的“工作”时,我的问题出现了,我收到错误:“工作不能为空”。奇怪的是,当我没有解决 GET 的承诺以显示以前的“工作”帖子时,我的 POST 正在按预期工作(保存数据)。
我承诺将数据检索到其他视图,并且在这些视图中我可以毫无问题地执行 PUT 请求,但我不明白我哪里出错了。虽然我是 Angular 的新手,可能会遗漏一些非常简单的东西......
我的 app.js; (第一个状态 'home.edit' 获取当前应用程序,这工作正常,我的第二个状态是得到所有 '工作',get 工作正常)
.state("home.edit",
{
url: "/applications/edit/:applicationId",
templateUrl: "app/applicationEdit/applicationEdit.html",
controller: "applicationEditCtrl as vm",
resolve:
{
applicationEditResource: "applicationEditResource",
application: function (applicationEditResource, $stateParams)
{
var applicationId = $stateParams.applicationId;
return applicationEditResource.get(
{ applicationId: applicationId }).$promise;
},
}
})
.state("home.edit.work", {
url: "/Work",
templateUrl: "app/applicationEdit/applicationEditWork.html",
controller: "workEditCtrl as vm",
resolve:
{
workEditResource: "workEditResource",
work: function (workEditResource) {
return workEditResource.get( ).$promise;
}
},
})
我的工作编辑资源;
return $resource(appSettings.serverPath + "api/works/:applicationId", null,
{
'get':
{
isArray: true,
method: 'GET',
headers: { 'Authorization': 'Bearer ' + currentUser.getProfile().token }
},
'save': {
method: 'POST',
headers: { 'Authorization': 'Bearer ' + currentUser.getProfile().token }
}
});
}
我的工作EditCtrl;
.controller("workEditCtrl",
["application",
"work",
"workEditResource",
workEditCtrl]);
function workEditCtrl(application, work, workEditResource) {
var vm = this;
vm.fail = '';
vm.message = '';
vm.work = work;
vm.application = application;
vm.work.applicationId = vm.application.applicationId;
if (vm.work && vm.application.applicationId) {
vm.title = "Hantera arbete " + vm.application.applicationId
}
//sparar nytt arbete med ansökans ID
vm.submit = function () {
vm.fail = '';
vm.message = '';
workEditResource.save(vm.work,
function(data){
vm.message = "Nytt arbete sparat"
}),
function (response) {
vm.fail = "Formuläret är inte korrekt ifyllt, var vänlig kontrollera uppgifterna och försök igen.";
};
}
}
}());
我的 API 控制器;
public IHttpActionResult Post([FromBody] Work work)
{
try
{
if (work == null)
{
return BadRequest("Work can not be null");
}
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var workRepository = new Models.WorkRepository();
var newWork = workRepository.Save(work);
if (newWork == null)
{
return Conflict();
}
return Created<Work>(Request.RequestUri + newWork.WorkId.ToString(), newWork);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
非常感谢任何关于我所缺少的提示:)
【问题讨论】:
-
您能否在 Chrome 中运行有问题的功能并使用开发工具监控网络流量,以查看发布到服务器的数据包含哪些“工作”对象?
-
我收到了您的回复,其中包含所有“工作”帖子的数组,因此 $resource 被混淆的假设似乎是正确的 :)
标签: angularjs angular-ui-router