2015-12-18 7 views
5

का उपयोग करने के लिए मैंने कुछ कोड उदाहरण देखे हैं जहां $element is injected into an angular controller। मैंने $ तत्व के लिए कोई दस्तावेज खोजने का प्रयास करने में कुछ समय बिताया है, लेकिन एंजुलर आधिकारिक दस्तावेज़ों में से किसी को भी ढूंढने में सक्षम रहा है।

$ तत्व सेवा का उपयोग किसके लिए किया जाना चाहिए, इसका उपयोग कब करना चाहिए, और इसके आसपास के सर्वोत्तम अभ्यास क्या हैं?

उत्तर

2

में मदद करता है जब आप एक नियंत्रक आप एक JQlite लिपटे मिल तत्व के संस्करण में $element इंजेक्षन कि नियंत्रक है से बुलाया निर्देशक नियंत्रक के मामले में, यह निर्देश होगा कि निर्देश किस तत्व से जुड़ा हुआ है। मुझे मिले दस्तावेज़ों में एकमात्र उल्लेख $compile description के तहत था।

आप देख सकते हैं कि निम्न उदाहरण में:

angular.module('myApp', []) 
 
    .controller('testCtrl', function($scope, $element) { 
 
    console.log($element); 
 
    }) 
 
    .directive('testDirective', function() { 
 
    return { 
 
     controller: function($scope, $element) { 
 
     console.log($element); 
 
     } 
 
    } 
 
    })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<body ng-app="myApp"> 
 
    <div ng-controller="testCtrl" id="controller">Controller</div> 
 
    <div test-directive id="directive">Directive</div> 
 
</body>

सबसे अच्छा अभ्यास है कि आप एक निर्देश में के अलावा कोई भी डोम परिवर्तन नहीं करते हैं और यहां तक ​​कि और अधिक विशेष रूप में आम तौर पर में है लिंक समारोह। यह मामला है कि आप लगभग $element को नियंत्रक में कभी भी उपयोग नहीं करना चाहते हैं क्योंकि सबसे अधिक संभावना है कि आप गलत कोण से समाधान के निकट आ रहे हैं।

7

$element एक jqlite (या jQuery उपलब्ध है) लपेटा हुआ ऑब्जेक्ट है जिसमें कुछ डीओएम ऑब्जेक्ट्स के संदर्भ के साथ-साथ उनके साथ बातचीत करने के लिए कुछ उपयोगी फ़ंक्शन शामिल हैं। जब भी आपको डोम में परिवर्तन करने की आवश्यकता होती है तो आप $element का उपयोग करेंगे।

उदाहरण के लिए

... आप एक निर्देशों डोम वस्तु आप $element इंजेक्षन और फोन

$element.addClass("my-class") 

हैं करने के लिए एक वर्ग को जोड़ने के लिए की जरूरत है, तो आप प्रलेखन here

0

वास्तव में देख सकते हैं कि यह एक सेवा नहीं है , लेकिन निर्देश में प्रयोग किया जाता है (लिंक-फ़ंक्शन में दूसरा तर्क)।

तत्व तत्व है, निर्देशक मेल खाता है और एक jqLite ऑब्जेक्ट है, इसका मतलब है कि आप उस पर jQuery- जैसे ऑपरेशन कर सकते हैं।

इसके अलावा, आप इस पैरामीटर $element या element या अपनी पसंद के किसी भी नाम का नाम दे सकते हैं।

आप सरकारी डॉक्स में अधिक जानकारी मिलेगी:

https://docs.angularjs.org/guide/directive

आशा है कि

1

मैंने $ तत्व के लिए कोई दस्तावेज़ीकरण खोजने का प्रयास करने में कुछ समय बिताया है लेकिन कोणीय आधिकारिक दस्तावेज़ों में कोई भी ढूंढने में सक्षम रहा है।

$element जो तब $injector करने के लिए दिया जाता है चार स्थानीय लोगों कि $compileProvider$controllerProvider के लिए देता है में से एक है। इंजेक्टर केवल आपके नियंत्रक समारोह में स्थानीय लोगों को इंजेक्ट करता है अगर पूछा जाता है।

चार स्थानीय लोगों हैं:

  • $scope
  • $element
  • $attrs
  • $transclude

आधिकारिक दस्तावेज: AngularJS $compile Service API Reference - controller

Github angular.js/compile.js से स्रोत कोड:

function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) { 
    var elementControllers = createMap(); 
    for (var controllerKey in controllerDirectives) { 
     var directive = controllerDirectives[controllerKey]; 
     var locals = { 
     $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, 
     $element: $element, 
     $attrs: attrs, 
     $transclude: transcludeFn 
     }; 

     var controller = directive.controller; 
     if (controller == '@') { 
     controller = attrs[directive.name]; 
     } 

     var controllerInstance = $controller(controller, locals, true, directive.controllerAs); 
संबंधित मुद्दे