2012-11-07 31 views
23

Bir ekran denetleyicim ve bir yönetim denetleyicim var. Ekran denetleyicimin içinde, seçilen öğeler listesinin yer aldığı bir açılır seçiciye sahibim.AngularJS'yi kullanarak öğesinin bir hizmet aracılığıyla güncelleştiren bir özelliğe nasıl bağlanırım

Listeyi güncellemek, yönetim denetleyicisine eklendiklerinde ekledikleri öğeleri eklemek için ekran alanı açılır menüsünü alabilirim, ancak açılan menüde en yeni öğeyi nasıl seçeceğimi anlayamıyorum.

<div ng-controller="MyDisplayCtrl"> 
    <select ng-model="item" ng-options="i.name for i in items"> 
    </select> 
</div> 

Durumumu göstermek için bir jsfiddle hazırladım. Nihayetinde, sorum, bu ng-model = "item" in bir servis tarafından güncellenen bir veri kaynağına nasıl bağlanacağıdır. Bunun için oldukça tatmin edici bir cevap buldum gibi

http://jsfiddle.net/whtevn/mUhPW/2/

cevap

15

Görünüşe göre.

I

function MyDisplayCtrl($scope, ItemStore) { 
    $scope.items = ItemStore.items; 
    $scope.item = ItemStore.currentItem; 

    // expose the itemstore service to the dom 
    $scope.store = ItemStore 

    $scope.getItem = function(){ 
     return(ItemStore.currentItem); 
    } 
} 

ve currentltem adres kontrol birimi ile depolama nesneyi ortaya şirketinden

<div ng-controller="MyDisplayCtrl"> 
    <select ng-model="store.currentItem" ng-options="i.name for i in items"> 
    </select> 
</div> 

http://jsfiddle.net/whtevn/Cp2RJ/3/

+0

bu iyi çalışır ve benim varsayılan deseni olarak kendisine taşımış, ama birisi benim görünümlerinde maruz hizmetlerini arayarak edilmemelidir bir neden varsa, bunu – whtevn

+0

Bir nedeni duymak istiyorum Düşünüyorum, önbelleğe alma. Hizmetinizin işlevselliği değişirse, denetleyicinizin gizemi yerine agresif önbelleğe alınabilecek görünümünüzü değiştirmeniz gerekecektir. Deneyimlerime göre, harici JavaScript dosyalarının önünü açmak daha kolay ve bu da endişelerin daha saf bir şekilde ayrılması olacaktır. Denetleyicinizin kapsamı doldurmasına ve görünümünüzün bu kapsama erişmesine izin verin. –

+0

Bir eğitim sitesinde izlediğim bir videoda, görüntülenen uygulamaların görüntülenmesi iyi bir uygulamadır. Bununla birlikte, hizmetlerin nasıl yazıldığını ve oluşturulduğunu, değişkenlere erişim vermek yerine değişken modüllere erişim sağlamak yerine, nasıl kullanılacağını açıklamak gerekir: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript. Ek olarak, hizmetler .service yerine .factory method kullanılarak oluşturulmuştur. –

İlgili konular