$ http.post在AngularJS中没有按预期行事

时间:2016-01-25 20:34:53

标签: angularjs http-post

我已经多次讨论过这个话题,但在阅读了我在这个主题上看到的每一个答案后,我仍然感到困惑。

正如我之前的许多人一样,我正在尝试使用CRUD功能创建这个基本的To Do应用程序。我有以下(删节显示相关部分)代码:

HTML:

        <div ng-repeat="item in items | orderObjectBy:sortby" ng-if="complete == 'N'">
            <strong>{{item.title}}</strong><br/>
            <em>{{item.details}}</em><br/>
            {{item.due}}<br/>
            <form>Mark Complete? <input type="checkbox" ng-model="item.complete" value="Y"></form>
            <a href="#/item/edit/{{item.id}}">Edit this item</a>
            <br/>
            <hr/>           
        </div>

    <button ng-click="save()">Save changes</button>

控制器中的JS:

    $scope.save = function() {
    $http.post('js/services/items.json', $scope.items).success(function(data) {
        $scope.msg = 'Data saved' + JSON.stringify($scope.items);
    });
};

当我选中“已完成”框,然后“保存更改”时,我获得了更新后的JSON的数据转储,但它从未实际更新过服务器上的JSON文件。该路径与我用于获取JSON的路径完全相同。没有抛出任何错误。它根本就没有做到。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

javascript是一种客户端语言,无法访问服务器的文件系统,因此angular本身无法更新Web服务器上的该文件。

要进行服务器端文件操作,需要使用服务器端语言,如php或.net

答案 1 :(得分:0)

呼叫服务端的角色服务

(function () {
    'use strict';

    angular.module('app')
           .controller('controller', controller);

    function controller($scope, service) {

        $scope.save = function () {
            var person = {
                Id: $scope.item.id,
                Name: $scope.item.name
            };

            service.update(personId, person, function (status) {
                $scope.msg = 'Data saved';
            });
        };
    }
})();

使用服务的角度控制器

namespace App.Controllers.Api
{
    [Route("api/[controller]")]
    public class TodoController : Controller
    {
        [FromServices]
        public ITodoRepository Repository { get; set; }

        [HttpPut("{id}")]
        public IActionResult Update(int id, [FromBodyModels.TodoModel data)
        {
            if (data == null || data.Id != id)
            {
                return this.HttpBadRequest();
            }

            this.Repository.Update(data);

            return new NoContentResult();
        }
    }
}

如果您使用的是.NET基础结构,那么您的服务可能就像。

{{1}}

*对于更新方法,您需要使用PUT方法而不是POST

有关ASP.NET 5(下一版ASP.NET)的更多信息,请参阅http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html