2014-11-06 13 views
5

Bir açısal uygulamayı miras aldım ve şimdi bir değişiklik yapmam gerekiyor.Angularjs'deki yürütme sırasını kontrol etme

Bu değişikliğin bir parçası olarak, bazı verilerin bir denetleyicide ayarlanması ve diğerinden kullanılması gerekir. Bu yüzden bir hizmet oluşturdum ve bir denetleyiciye veri yazdım ve bir denetleyici veriyi okudum. Ancak

angular.module('appRoot.controllers') 

.controller('pageController', function (myApiService, myService) { 
    // load data from API call 
    var data = myApiService.getData(); 

    // Write data into service 
    myService.addData(data); 
}) 

.controller('pageSubController', function (myService) { 
    // Read data from service 
    var data = myService.getData(); 

    // Do something with data.... 
}) 

, ben her zaman tanımsız datapageSubController kullanmak gidin.

pageController'un pageSubController'dan önce çalıştığından nasıl emin olabilirim? Yoksa bu doğru soru sormak mı?

DÜZENLEME

hizmetim kodu:

angular.module('appRoot.factories') 

.factory('myService', function() { 
    var data = []; 

    var addData = function (d) { 
     data = d; 
    }; 

    var getData = function() { 
     return data; 
    }; 

    return { 
     addData: addData, 
     getData: getData 
    }; 
}) 
+1

biz 'myService' tanımına bir göz Can:

Böyle bir şey deneyebilirsiniz

? Ayrıca html –

+0

@RahilWazir ekledi. veri kullanımı aslında ng-tablo params –

+0

içinde Eğer html içerirseniz, kontrolörleri nasıl kullandığınızı bilecek harika olurdu. –

cevap

6

Denetleyicinizin beklemesini istiyorsanız, diğer denetleyiciden yanıt almanız gerekir. Angularjs içinde $broadcast seçeneğini kullanmayı deneyebilirsiniz.

Sayfa denetleyicide, "datagged" iletisini yayınlamanız gerekir ve pageubcontroller dosyasında $ scope. $ Kullanarak mesajı beklemeniz ve ardından "getData" işlevini işlemeniz gerekir.

angular.module('appRoot.controllers') 
.controller('pageController', function (myApiService, myService,$rootScope) { 
    // load data from API call 
    var data = myApiService.getData(); 

    // Write data into service 
    myService.addData(data); 
    $rootScope.$broadcast('dataAdded', data); 
}) 

.controller('pageSubController', function (myService,$rootScope) { 
    // Read data from service 
    $scope.$on('dataAdded', function(event, data) { 
     var data = myService.getData(); 
    } 

    // Do something with data.... 
}) 
+0

Teşekkürler - Bunun ile bir oyun oynayacağım ve –

+0

'u bilmenizi istiyorum. Bu sadece ihtiyacım olan şeydi - içine girebileceğim global bir olay. Teşekkürler! –

2

Ben veriler için bir söz dönmek için hizmet değiştirecek. Sorulduğunda, veriler ayarlanmadıysa, söz vermeniz yeterlidir. Daha sonra, diğer denetleyici verileri ayarladıktan sonra, önceki vaatleri veriyle çözümleyin. Önbelleğe alma API'sindeki sonuçları, denetleyicilerin API'dan veri alıp almadığımı veya önbelleğe alınmış verileri döndürdüğümü bilmediği veya umursamayacak şekilde önbelleğe alması için kullandım. Buna benzer bir şey olsa da, veriler gerçekten ayarlandığında çözülmesi gereken bir dizi vaatler tutmanıza gerek olabilir.

+0

Cevabınız için teşekkürler - api aramasını hizmetten alamıyorum, sadece veri depolamak için kullanıyorum. Bu önerilen bir yaklaşım değil mi? –

+0

OP, verileri almak için herhangi bir sunucu tarafı isteği göndermiyor gibi görünmüyor. Özelliklere basit bir veri atamasıdır. –

+0

Bir şeyi özlüyor muyum yoksa "$ timeout" için aramanız gereksiz mi? Sadece 'deferred.resolve (factory.item)' diyebilmeli ve söz vermelisiniz. –

İlgili konular