2012-10-18 9 views
53

मेरे पास बाहरी इटम्स की एक सूची है। प्रत्येक बाहरी इटैम के अंदर, मेरे पास आंतरिक इटम्स की एक सूची है। वे गतिशील रूप से क्रमबद्ध हैं।मैं AngularJS नियंत्रक में वर्तमान स्कोप डोम-तत्व कैसे प्राप्त करूं?

जब माउस कर्सर आंतरिक इटम्स में से किसी एक पर इंगित करता है, तो मुझे उस आंतरिक इटैम तत्व के ऊपर पॉपअप विंडो दिखाना होगा।

पॉपअप div शरीर का बच्चा है, क्योंकि मैं प्रत्येक आंतरिक इटम्स के लिए एक अलग पॉपअप नहीं चाहता हूं।

जिस तरह से मैं इसे देखता हूं - ng-mouseover पर मैं उस फ़ंक्शन को कॉल करता हूं जो मेरे बिल्कुल स्थानांतरित पॉपअप पर बाएं/शीर्ष गुण सेट करता है। इसलिए आंतरिक ITems के लिए मैं jQuery .offset() विधि को कॉल करना चाहता हूं जो मुझे पृष्ठ के ऊपरी-बाएं कोने से बाएं/शीर्ष मान देता है।

तो मैं वर्तमान दायरे तत्व का jQuery ऑब्जेक्ट कैसे प्राप्त कर सकता हूं? या, अगर मैं गलत तरीके से

उत्तर

69

नियंत्रक में चुन लिया है:

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

आप गलत तरीके को चुना है। नियंत्रक में कभी भी $ तत्व का उपयोग न करें। आपको इसे पॉपअप निर्देश के रूप में लपेटने की आवश्यकता है और फिर पॉप-अप को अपने HTML में डालना होगा। – ganaraj

+1

नियंत्रक में $ तत्व का उपयोग करना गलत क्यों है? –

+11

यह कोणीय के नो-डोम-मैनिपुलेशन-इन-द-कंट्रोलर मंत्र के खिलाफ चला जाता है। कोड को डीकॉप्लेड रखता है, आसान परीक्षण के लिए अनुमति देता है, और सभी डोम मैनिपुलेशन कोड घोषणात्मक और टेम्पलेट्स में रखता है। कहा जा रहा है, कभी-कभी आपको तत्व की आवश्यकता होती है। फ़ील्ड के ब्राउज़र स्वत: पूर्णता, उदाहरण के लिए, इनपुट भरें लेकिन ng_model अद्यतनों को ट्रिगर न करें। उन मामलों में आपके पास इनपुट ($) .val() इनपुट होना चाहिए। – hurshagrawal

8

बेहतर और सही समाधान एक निर्देश है। दायरा वही है, चाहे निर्देशक या मुख्य नियंत्रक के नियंत्रक में। डीओएम संचालन करने के लिए $element का उपयोग करें। निर्देशक नियंत्रक में परिभाषित विधि मुख्य नियंत्रक में पहुंच योग्य है।

उदाहरण के लिए, एक बच्चे के तत्व खोजने:

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

सवाल यह है कि डोम में एचटीएमएल कैसे प्राप्त करें। तो आईडी द्वारा कुछ डोम तत्व से एचटीएमएल की नियंत्रक स्ट्रिंग में कैसे प्राप्त करें? – fdrv

+0

मैंने इस उत्तर को वोट दिया है, क्योंकि यह पोस्ट किए गए प्रश्न का उत्तर नहीं है। – drdrej

संबंधित मुद्दे