Я создал приложение REST с использованием углового ресурса $, но я замечаю, что каждый раз, когда я делаю put или post с помощью формы ... $ resource создает пустую запись (объект) в базу данных каждый раз есть перезагрузка страницы, которая затем отображается в интерфейсе. Это также происходит, когда post/put не создается, а просто перезагружается. Я не знаю, правильно ли я использую функцию $ save или есть что-то с моим кодом.
======================================================================================================================================= ========================================
<div id="hello">
<div class='row'>
<div class="col-md-6">
<label for="content">Get greeting by ID:</label>
<div>
<input type='text' ng-model='$ctrl.getId' name="id" class="form-control"/>
<span> {{ $ctrl.greeting.content }} </span>
</div>
<button ng-click='$ctrl.get();'>Get</button>
<hr/>
<div class="form-group">
<label for="content">Post new Greeting:</label>
<div>
<textarea ng-model='$ctrl.postData' name="content" class="form-control"></textarea>
</div>
<button ng-click='$ctrl.post();'>Submit</button>
</div>
<hr/>
<div class="form-group">
<label for="content">Edit greeting by ID:</label>
<div>
<input type='text' ng-model='$ctrl.updateId' name="id" class="form-control"/>
</div>
</div>
<div class="form-group">
<div>
<textarea ng-model='$ctrl.updateData' name="content" class="form-control"></textarea>
</div>
<button ng-click='$ctrl.put();'>Submit</button>
</div>
<hr/>
</div>
<div class="col-md-6">
<hr/>
<div class='row' ng-init="$ctrl.listAll()">
<div ng-repeat="eachElement in $ctrl.greetingList.hello_collection">
<div class="col-md-2"> {{ eachElement.id }} </div>
<div class="col-md-5"> {{ eachElement.content }} </div>
<div class="col-md-5"><button ng-click="$ctrl.remove(eachElement.id)">delete</button></div>
</div>
</div>
</div>
</div>
<hr/>
=================== ======================================================================================== ==========
.factory("helloService", ['$resource',
function($resource) {
return $resource('/direct/hello/:greetingId.json',
{ greetingId: '@greetingId' }, {
get: {
method: 'GET',
params: {greetingId: '@greetingId'},
isArray: false
},
post: {
method: 'POST',
headers:{'Content-Type':'application/json; charset=UTF-8'},
},
put: {
method: 'PUT',
params: {greetingId: '@greetingId'}
},
remove: {
method: 'DELETE',
params: {greetingId: '@greetingId'}
},
listAll: {
method: 'GET',
isArray: false
},
});
}
])
================================ компонент ========================
.component('hello', {
controller: ['helloService',
function (helloService) {
var self = this;
self.greetingList;
function get() {
self.greeting = helloService.get({greetingId: self.getId});
}
self.get = get;
function post() {
self.newGreeting = helloService.post({'content': self.postData }, function(data){
console.log(data);
});
self.greetingList.hello_collection.push(self.newGreeting);
self.postData = "";
}
self.post = post;
function put() {
helloService.put({greetingId: self.updateId}, {'content': self.updateData });
var newValue = self.updateData;
var greeting = helloService.get({greetingId: self.updateId}, function(data){
data.content == newValue;
console.log(data);
console.log(data.content);
});
console.log(greeting);
/**
for (var i = 0; i < self.greetingList.hello_collection.length; i++)
{
if(self.greetingList.hello_collection[i].greetingId == self.updateId){
console.log(self.greetingList.hello_collection[i]);
self.greetingList.hello_collection[i].content = self.updateData;
}
}
**/
self.updateId, self.updateData = "";
}
self.put = put;
function remove(deleteId) {
var greeting = helloService.get({greetingId: deleteId})
for (var i = 0; i < self.greetingList.hello_collection.length; i++) {
if (self.greetingList.hello_collection[i]["id"] == deleteId) {
var index = i;
break;
}
}
if (index >= 0) {
self.greetingList.hello_collection.splice(index, 1);
helloService.remove({greetingId: deleteId}, function() {
greeting.$delete();
});
}
}
self.remove = remove;
var greetingList;
function listAll() {
self.greetingList = helloService.listAll();
}
self.listAll = listAll;
var newService = new helloService();
newService.$save();
}
],
templateUrl: "./templates/hello.html",
, когда я удалить эти строки, как вы направили ... если я сделать новый пост или положить, страницу не отображает результат мгновенно, кроме как после обновления многих страниц, но данные обновляются в базе данных. –
Да, это потому, что вы назначаете возвращаемое значение post() как новый объект в своем списке коллекции в 'self.newGreeting = helloService.post (..', но это не правильный способ получить новую вставленную объект, правильный способ - использовать обратный вызов успеха для его получения, я обновил ответ, чтобы покрыть это. –
спасибо @shadi ... но все еще есть проблема. Каждый раз, когда я выполняю операцию удаления ... на странице перезагрузите, он по-прежнему отображает предыдущий список до перезагрузки, но содержимое не удалено в базе данных. –