2013-08-18 24 views
8

Bir JSON $ kaynağınız olduğunda, elde edilen nesneleri elde edildikten sonra daha belirli nesnelere nasıl atabilirsiniz?AngularJS özel model nesnelerle yöntemleri?

Örneğin, şimdi bir Nesneler Dizisi olarak geri dönüyorlar, ancak "Randevu" nesneleri dizisi olarak geri gelmelerini istiyorum, böylece bu Randevu nesnesiyle ilgili soruları yanıtlayabilecek bazı yöntemlerim olabilir. Bu Randevu nesnesi. Ör: Bu Randevu ile ilişkili herhangi bir hizmet var mı? Bu randevu sabah mı yoksa öğleden sonra mı?

İlk başta transformResponse hookunun ngResource'dan çalışacağını düşündüm, ancak bu işe yaramıyor. Bundan dönüş gerçek nesneler değildir. Bu fonksiyonla sadece JSON ayrıştırmadan önceki gerçek verileri değiştirebileceğinizi düşünür.

Son olarak, bunun uygun bir angularJS tekniği olup olmadığını sorguluyorum. Ya da bu yardımcı yöntemler bir denetleyicide mi yoksa başka bir modülde mi ortaya çıkar ve üzerinde çalışılacak nesneyi kabul etmeli mi? Sadece temizleyicinin onları nesneye sarmış olduğunu düşünüyorum, ama angularJS'de çok deneyimli olmadığımı itiraf ediyorum.

cevap

22

Eğer bir fabrika kullanarak ve bir işlevi örneğin iade madde prototip (DEMO) işlevini ekleyebilir eklemek istiyorsanız:

app.factory('Appointment', ['$resource', function($resource) { 
    var Item = $resource('appointments.json',{/*bindings*/},{/*actions*/}); 

    Item.prototype.hasServices = function() { 
    if(this.services.length > 0) return true; 
    else return false; 
    }; 

    Item.prototype.partOfDay = function() { 
    if(this.time.split(':')[0] > 12) return "afternoon"; 
    else return "morning"; 
    }; 

    return Item; 

}]); 

Ve sonra da kaynak erişin.Fotoğrafı kontrol:

{{appointment.partOfDay()}} 
: içinde, örneğin bir ng tekrar görünümünde

$scope.appointments = Appointment.query({}, function() { 
    console.log($scope.appointments[0].partOfDay()) 
}); 

ya da doğrudan doğruya

Son sorunuzu cevaplamak için, yukarıdaki çözümün uygun bir angularjs tekniği olduğunu düşünüyorum. Belirli bir kaynak türüyle ilişkili işlevleriniz olduğunda, bunları doğrudan kaynak nesneye doğrudan eklemek en iyisidir. Kaynağı bir parametre olarak iletmeniz gerektiğinde ve işlevler birden çok denetleyicide veya kapsamda kullanılabildiğinde, neden denetleyicide yardımcı işlevler oluşturmalısınız ?!

+1

Örnek Plunker için teşekkürler. JSON hizmetinden Diziler elde ettiğinizde $ kaynağının nasıl çalıştığını gerçekten anlayamadım. Bir şeyleri hata ayıkladığımda, hala bir "Kaynak" nesnesini ayarlıyor, ama aslında bir kez elde edildikten sonra bir şekilde Randevu nesnesine ayarlandığını farz ediyorum. Çalışıyorum, ama sadece nasıl çalıştığımı anlamak istiyorum. –

+1

Fabrikaya yalnızca Randevu adı verilir ve prototipine eklenen ek işlevlerle birlikte standart bir kaynak nesnesi döndürür. –

+1

Temelde, bazı özellikler ile bir nesne döndüren Randevu olarak adlandırılan basit js'de temel bir işlev yazdığınızda aynıdır. Bu istenen json kendisi ile ilgisi yoktur. Ajax isteği biter bitmez sonuç, kaynak nesnesine eklenir. –

İlgili konular