2012-10-18 14 views
53

Dış öğeler listesi var. Her dış öğe içinde, iç öğeler listesi var. Dinamik olarak sıralanırlar.AngularJS denetleyicisinde geçerli kapsam dom elementini nasıl alabilirim?

Fare imleci innerItems öğelerinden birine işaret ettiğinde, popupI penceresini bu innerItem öğesinin hemen üstünde göstermem gerekir.

Popup div, vücudun çocuğudur, çünkü her bir internalItems için ayrı bir açılır pencereye sahip olmak istemiyorum.

Gördüğüm gibi - ng-mouseover Üzerinde sol/üst özellikleri tam olarak konumlandırılan pop-up'ım olarak ayarlar. Bu yüzden, her iç mimarlık için sayfanın sol üst köşesinden bana sol/üst değerler veren jQuery .offset() yöntemini çağırmak istiyorum.

Geçerli kapsam öğesinin jQuery nesnesini nasıl alabilirim? Ben yanlış bir şekilde denetleyici olarak

cevap

69

seçtiyseniz Veya:

function innerItem($scope, $element){ 
    var jQueryInnerItem = $($element); 
} 
+44

. Denetleyicide $ elemente erişemeyin. Bunu bir Popup yönergesi olarak sarmalamanız ve ardından pop-up'ınızı HTML'nize eklemeniz gerekir. – ganaraj

+1

Denetleyicideki $ öğesine erişmek neden yanlış? –

+11

Açısal kontrolör olmayan mantra üzerinde manipülasyona karşı gider. Kodu ayrıştırdı tutar, daha kolay test edilmesini sağlar ve tüm dom manipülasyon kodu bildirimlerini ve şablonlarda tutar. Demek ki, bazen öğeye ihtiyacınız var. Tarayıcı otomatik alanlarını doldurur, örneğin girişleri doldurur ancak ng_model güncellemelerini tetiklemez. Bu gibi durumlarda, $ (el) .val() girişine sahip olursunuz. – hurshagrawal

8

daha iyi ve doğru çözüm direktifi sahip olmaktır. Direktifin veya ana kontrolörün kontrolöründe kapsam aynıdır. DOM işlemlerini yapmak için $element kullanın. Direktif denetleyicide tanımlanan yöntem ana denetleyicide erişilebilir.

Örnek, bir alt öğe bulma: Eğer yanlış bir şekilde seçmiş

var app = angular.module('myapp', []); 
app.directive("testDir", function() { 
    function link(scope, element) { 

    } 
    return { 
     restrict: "AE", 
     link: link, 
     controller:function($scope,$element){ 
      $scope.name2 = 'this is second name'; 
      var barGridSection = $element.find('#barGridSection'); //helps to find the child element. 
    } 
    }; 
}) 

app.controller('mainController', function ($scope) { 
$scope.name='this is first name' 
}); 
+1

soru html dom nasıl elde edilir. Peki, bazı dom elemanlarından html'nin denetleyici dizgisine nasıl girilir? – fdrv

+0

Bu cevabı reddettim çünkü bu, yayınlanan soru için bir cevap değil. – drdrej

İlgili konular