1

$ http.get adresimin hizmetimden denetleyicime geçmesini istiyorum.Servislerden çıktıları denetleyicilere kullanın

myserviceSample.js

function messagesService($q,$http){ 
    var messages; 
    $http({ 
     method: 'GET', 
     url: 'http://api.com/feedback/list' 
    }) 
    .then(function success(response){ 

     messages = response.data; 
     console.log(messages); 
    },function error(response){ 
     console.log('error'+ response); 
    }); 
    console.log(messages); 

    return { 
     loadAllItems : function() { 
     return $q.when(messages); 
     } 
    }; 
    } 

})(); 

mycontrollerSample.js

function MessagesController(messagesService) { 
    var vm = this; 

    vm.messages = []; 

    messagesService 
     .loadAllItems() 
     .then(function(messages) { 
     console.log(messages); 
     vm.messages = [].concat(messages); 
     }); 
    } 
})(); 

Yukarıdaki kod sonucu tanımlanmamış çıkış verir. Neyi özledim?

+0

hizmeti hazırlanıyor nasıl Sadece bir yorum ( söz kendisi çıkmıyor) orada 210 yöntemi. Hizmet başlatıldığında geri bildirim/liste almak için çağrı yapıyorsunuz gibi görünüyor. Bu kötü düşünürdüm, bilgi talebi geldiğinde, yani loadAllItems çağrıldığında çağrı yapılmalıdır. Ayrıca işlev sarmalayıcısını dönüş nesnesinden kaldırır ve tüm işlevselliği loadAllItems adlı bir işleve yerleştiririm. –

cevap

3

$q.when nesnesi, çalışmasını sağlamak için promise/object bekler. Sizin durumunuzda, $http.get numaralı çağrıyı yaparken promise nesnesini $q.when'a aktarmanız gerekmektedir. Burada messages nesnesi, $http.get sözünü tutmaz, bu nedenle aşağıdaki gibi bir yöntemin uygulanmasını değiştirebilirsiniz.

Servis

function messagesService($q,$http){ 
    var messages = $http({ 
     method: 'GET', 
     url: 'http://api.com/feedback/list' 
    }) 
    .then(function success(response){ 
     return response.data; 
    },function error(response){ 
     return $q.reject('Error Occured.'); 
    }); 

    return { 
     loadAllItems : function() { 
     return $q.when(messages); 
     } 
    }; 
} 
Ardından kontrolör & .then trick

function MessagesController(messagesService) { 
    var vm = this; 
    vm.messages = []; 
    messagesService 
     .loadAllItems() 
     .then(function(messages) { 
     console.log(messages); 
     vm.messages = [].concat(messages); 
     }); 
} 

Not yapacak bu sözü çözecek

: Özel bir söz oluşturmak için $q kullanma olarak kabul edilirolduğunda kötü desen

Geliştirilmiş Uygulama

function messagesService($q, $http) { 
    var messages, getList = function() { 
    return $http({ 
     method: 'GET', 
     url: 'http://api.com/feedback/list' 
    }) 
    .then(function success(response) { 
     messages = response.data 
     return response.data; 
    }, function error(response) { 
     return $q.reject('Error Occured.'); 
    }); 
    }; 

    return { 
    loadAllItems: function() { 
     if (!data) 
     return getList(); //return promise 
     else 
     return $q.resolve(messages); //return data 
    } 
    }; 
}; 
+0

Teşekkürler Pankaj, şimdi çözebilir – artemist

+0

@artemist kodun güncellenmiş sürümüne bakın .. Size yardımcı olmaktan memnun .. Teşekkürler :) –

+0

evet, iki kez :-) yaparım – artemist

İlgili konular