5

Verileri görüntülemek için bir yönerge oluşturdum. Bir ng-tekrarda ekleyebilir ve modelin bağlı olduğunu görebilirim. Sayfayı tıklayıp geri döndürdüğümde, veriler daha önce yapılan değişikliklerle tekrar görüntülenir. Verileri bir API’dan yüklemek için ngResources’ı kullandım. Şimdiye kadar, çok iyi: beklendiği gibi çalışıyor.Öğeler kaydedildiğinde kayboluyor

Kırılan kısım aşağıdadır: Verileri yönergeme göre API'ya kaydedersem, öğe sayfadan kaybolur (daha belirgin olarak, alanları boştur). Öğelerin geri kalanı önceki gibi kalır. Sadece kaydedilen biri değişir.

.directive('action', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      data:'=model' 
     }, 
     templateUrl: 'modules/actions/view.tpl.html', 
     replace: true, 
     link: function(scope, element, attr) { 
      scope.save = function() { 
       console.log(" data to save:" + JSON.stringify(scope.data)); 
       scope.data.$save(); 
      } 
     } 
    }; 
}) 

yönergesi ile ilişkili html içerir:

İşte
<p><input type="text" ng-model="data.assignee" ng-change="save()"> 

yönergesi kullanıldığı açıklanmıştır: Burada

<div ng-repeat="item in data"> 
    <action model="item" /> 
</div> 

ek bağlam gösteren fiddle var Burada

direktif bu . Bazı sahte verilerle çalışan temel yönergeyi görebilirsiniz. API çağrısının kodu yorumlandı.

Yine sorun, scope.data.$save(); satırının yüklenememesiyle ortaya çıkar. Ng-tekrarda görüntülenen öğe kendini kurtarmaya çalıştığında, görüntülenen öğeler listesinden kaybolur, boş alanlarla değiştirilir. Uygulamanın tamamını yeniden yüklediğimde, API kaydının başarılı olduğunu ve öğenin artık doğru şekilde görüntülendiğini görüyorum.

Neler olup bittiğimi kaydetme çağrısının doğru öğe üzerinde çalıştığı, ancak bir şekilde değiştirilmiş öğeyi yeni, boş bir yöntemle değiştirmesidir, belki de prototip kalıtım nedeniyle olabilir. Kaydetme, ana kapsamda, listeyi yeniden çizen ve yeni boş öğeyi gösteren bir güncelleştirmeye neden olur.

Neler olup bittiğini ve nasıl düzeltileceğini açıklayabilir mi?

cevap

4

$save() komutuna verilen HTTP yanıtının boş veriyi döndürdüğünü göreceksiniz.

$resource bu şekilde çalışır. $save()'u aradığınızda, (varsayılan olarak) REST servisini bir HTTP POST ile arayacaktır. Yanıtın, kaynağın sunucu durumu olması bekleniyor. Sonuç daha sonra nesnenize kopyalanır. Bu durumda, REST hizmetinizin boş bir nesne döndürdüğünü tahmin ediyorum.

Başka bir deyişle, {name: 'foo'} numaralı bir POST ile bir POST gönderirseniz, sunucunun yanıtının {id: 44, name: 'foo', extraInfoServerCreated: 'bar'} gibi bir şey olmasını beklersiniz.

+1

Haklısınız. Sunucunun kaydedilen verileri geri getirmesi sorunu tamamen çözdü. Teşekkürler! – CodeGuy2001

+0

Ya da yanıt verilerinin yerine orijinal öğenin kullanılmasını zorlayacağından daha kolaysa boş yanıt verin. – cyberwombat

+0

@Yashua Emin misiniz? Açısal '$ resource', verileri REST hizmetinden geri döndüğünüzde değiştirdiğini düşündüm ... böylece boş döndüğünüzde, modelinizi temizleyecektir. –

İlgili konular