2013-08-26 18 views
5

Neredeyse her zaman rota değişikliklerinde kapsamları sürdürmek istediğimi ve bunun için, her şeyi bir servise iletmekten başka hiçbir şey için denetleyicileri kullanmayı bıraktığımı buldum. . Benim Kontrolörler bütün böyle bir şey görsterme:Rotalar arasındaki kapsamı sürdürmek için desen

app.factory('CtrlAService', function() { 
    return { 
     scope: {}, 
    }; 
}); 

function CtrlA($scope, CtrlAService) { 
    $scope.data = CtrlAService.scope; 

} 

demek ki, benim denetleyicisi bir hizmet değişkene bir değişken bağlamak olduğunu mu hepsi ve bir işlev ya da iki bağlayıcı dışında - Ben kullanmıyorum her şey için kontrolörler.

Bu yaklaşım doğru mu? Yoksa, bunu başarmanın daha iyi bir yolu nedir?

Burada bir örnek uygulama yaptık: http://jsfiddle.net/Wc22k/1/

+1

Aynı düşünce sürecinden aşağı düştüm ve seninle aynı sonuca vardım. hizmetler çoğu şeyi ele alır, kontrolörler neredeyse hiçbir şey yapmaz. http://stackoverflow.com/questions/12940974/maintain-model-of-scope-when-changing-between-views-in-angularjs/16559855#16559855 – Anton

cevap

2

Sana bir veri ağır uygulamanız varsa bu genellikle tür doğru olduğunu düşünüyorum. Görünümler için daha fazla işlevselliğe ihtiyaç duyduğunuzda, kontrol cihazlarınızda ne kadar çok bulunursunuz. Mesela google-map ve ng-grid'i oldukça kapsamlı bir uygulama içinde kullanıyorum, böylece tüm kontrolörlerim kontrolörlerin içindeki tüm konfigürasyonları (bazen etiket gösterimi vb.) Içeriyor. Ayrıca bulduğum ve değiştirdiğim google-maps kodunun (MIT Lisanslı) google maps kodunu ve direktifin denetleyicisini tamamlayan oldukça karmaşık bir JavaScript nesnesi var.

Çok kısa bir sürümde, veri ağırlığında bir uygulamada, kodunuzun çoğu hizmetlerde sona eriyor ve denetleyiciler yalnızca bir hizmetten alınan bazı verilere görüntüyü diğerlerine göre ayarlıyor. Sürdürmekte olan kapsam hakkında ne söylediğinizi görüyorum ama denetleyicideki görünüm için gerekli olan tüm mantığı bırakmak en iyisidir (bunu hizmetteki veri modelinin tersine görünüm modeli olarak görüyorum). Sadece neyin olup bittiğini ve neyi etkilediğini net bir şekilde ayırır. Örneğin, bazı görünümler arasında bir veri parçasını sürdürmem gerekiyorsa, hizmette saklıyorum (daha çok anlamsal ve işlevsel olarak uygun olduğu için değil, bunun yerine daha fazla zaman almamış olmasından dolayı bir "değer" kullanmayı düşünüyorum). faktör).