2016-01-25 2 views
0

Я обсуждал эту тему несколько раз, но я все еще смущен, прочитав каждый ответ, который я видел по этой теме.

Как многие из вас передо мной, я пытаюсь создать это основное приложение для работы с функциями CRUD. У меня есть следующие (в сокращенном, чтобы показать соответствующие части) код:

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); 
    }); 
}; 

Когда я проверить "Completed" флажок, а затем «Сохранить Изменения ", я получаю дамп данных обновленного JSON, но он никогда не обновлял файл JSON на сервере. Этот путь - это тот же самый точный путь, который я использую, чтобы получить JSON в первую очередь. Ошибок не было. Он просто этого не делает.

Что мне здесь не хватает?

+0

Err, Я смущен ... вы ожидаете, что публикация ваших json-данных на сервере будет обновлять ваш файл? Исходя из того, что такое предпосылка? –

+0

Метод ярлыка для выполнения запроса POST - это сообщение (url, data). Вы указываете правильный URL-адрес своей службы? Означает ли этот URL-адрес службы получение запросов POST? –

+0

Я думаю, это то, чего я не хватает. Основываясь на том, что я читал, я подумал, что могу использовать $ http.post, и он обновит файл JSON на сервере. Я спрашиваю, каков был шаг, который я явно потерял, чтобы это действительно работало? –

ответ

1

javascript является языком на стороне клиента и не имеет доступа к файловой системе сервера, поэтому он не может обновить этот файл на веб-сервере.

делать сервера манипуляции со стороны файла, вам необходимо использовать на стороне сервера язык, таких как PHP или .net

+0

Хорошо. Я работаю с Php, поэтому вы говорите, что мне нужно отправить форму и позволить Php манипулировать файлом? Итак, что именно делает $ http.post()? –

+0

, эта команда делает запрос на ваш веб-сервер. это до php, чтобы манипулировать файлами на сервере и отвечать на запрос соответственно. – mehring

+0

Но, если я уже вернусь на сервер с отправкой формы, зачем мне нужен http.post? Или, вы говорите, что URL-адрес в http.post должен быть файлом Php, который будет управлять JSON? Но это не имеет смысла, так как у этого файла Php есть обновленная информация? Мне не кажется, что он сможет прочитать этот второй параметр контента. –

0

угловыми службы для вызова стороны обслуживания

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .factory('service', service); 

    function service($http) { 
     var url = 'api/todo'; 

     var service = { 
      update: update 
     }; 

     return service; 

     function update(id, data, callback, errorCallback) { 
      if (id) { 
       $http({ 
        method: 'PUT', 
        url: url + '/' + id, 
        data: data 
       }) 
       .success(function (data, status, headers, config) { 
        if (callback) { 
         callback(status); 
        } 
       }) 
       .error(function (data, status, headers, config) { 
       }); 
      } 
     }; 
    } 
})(); 

Угловое контроллер, который использует службу

(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'; 
      }); 
     }; 
    } 
})(); 

Если вы используете инфраструктуру .NET, ваш сервис может выглядеть.

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(); 
     } 
    } 
} 

* Для методов обновления вам необходимо использовать метод PUT вместо POST

Для получения дополнительных сведений о ASP.NET 5 (следующая версия ASP.NET), вы можете обратиться к http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html

Смежные вопросы