दिलचस्प पोस्ट
ग्रिडव्यू: क्यों सच है और इसके लिए क्या मतलब है? एंड्रॉइड 4.2 ने मेरे एन्क्रिप्ट / डिक्रिप्ट कोड को तोड़ दिया और प्रदान किए गए समाधान काम नहीं करते मैं अपने टेम्पलेट के बिना किसी भी MySQL तालिका में सभी डुप्लिकेट रिकॉर्ड कैसे हटाऊं? सुरक्षित एसक्यूएल नामों का उपयोग कैसे करें? क्या जावा में एक int.tryparse है जो खराब डेटा के लिए एक अपवाद नहीं फेंकता है? एक चर के लिए मान निर्दिष्ट करने के लिए लाइन द्वारा एक फ़ाइल लाइन पढ़ें सार्वभौम चयनकर्ता का प्रदर्शन क्या है? बाध्यकारी वसंत mvc आदेश वस्तुओं जब पैरामीटर नाम को अनुकूलित करने के लिए matlab में समय कोड JQuery स्थापित कर रहा है? एक सीमावर्ती रूप चलने योग्य बनाओ? एकाधिक HTTP अनुरोधों को समानांतर में चलाने की कोशिश कर रहा है, लेकिन विंडोज (रजिस्ट्री) द्वारा सीमित किया जा रहा है Apache HttpClient 4.0 में SSL प्रमाणपत्र त्रुटियों को कैसे अनदेखा करें नाम इस संदर्भ में बाध्य नहीं है Enum "वंशानुक्रम"

AngularJS – बाल क्षेत्र तक पहुंच

अगर मेरे पास निम्न नियंत्रक हैं:

function parent($scope, service) { $scope.a = 'foo'; $scope.save = function() { service.save({ a: $scope.a, b: $scope.b }); } } function child($scope) { $scope.b = 'bar'; } 

parent को child बाहर पढ़ने के लिए उचित तरीका क्या है? यदि parent में b को परिभाषित करने के लिए आवश्यक है, तो क्या यह सही ढंग से गलती नहीं करेगा कि b ऐसी संपत्ति है जो कि child से संबंधित कुछ चीजों का वर्णन करती है और parent नहीं है?

अद्यतन: इस बारे में और सोच कर, अगर एक से अधिक बच्चे b यह parent लिए संघर्ष पैदा करेगा, जिस पर b को पुनः प्राप्त होगा। मेरा सवाल है, parent से b तक पहुंचने का सही तरीका क्या है?

वेब के समाधान से एकत्रित समाधान "AngularJS – बाल क्षेत्र तक पहुंच"

AngularJS में स्कॉप्स प्रोटोटाइप उत्तराधिकार का उपयोग करते हैं, जब एक बच्चे के दायरे में एक संपत्ति की तलाश करते हैं तो इंटरप्रीटर बच्चे से शुरू होने वाली प्रोटोटाइप श्रृंखला को देखेगा और माता-पिता को जारी रखेगा, जब तक कि यह संपत्ति नहीं मिल पाती है, अन्यथा नहीं।

इस मुद्दे पर वोज्टा की टिप्पणियों की जांच करें https://groups.google.com/d/msg/angular/LDNz_TQQiNE/ygYrSvdI0A0J

संक्षेप में: आप एक बच्चे के स्कोप को एक अभिभावक के दायरे से नहीं निकाल सकते हैं।

आपके समाधान:

  1. माता-पिता में गुणों को परिभाषित करें और बच्चों से उन्हें एक्सेस करें (उपरोक्त लिंक पढ़ें)
  2. राज्य को साझा करने के लिए एक सेवा का उपयोग करें
  3. घटनाओं के माध्यम से डेटा पास करें $emit रूट स्कोप तक तक माता-पिता को घटनाओं को ऊपर भेजता है और $broadcast प्रेषण ईवेंट नीचे की ओर जाता है यह आपको चीजों को यथार्थ रूप से सही रखने में मदद कर सकता है

हालांकि, इस मामले को संभालने का सबसे अच्छा तरीका है jm- के उत्तर, भविष्य के संदर्भ के लिए, एक दायरा $ $ childhead, $ $ childTail, $$ अगले सिब्लिंग और $ $ पूर्ववर्ती सदस्यों का उपयोग करके बाल स्कोप तक पहुंच संभव है। ये दस्तावेज नहीं हैं ताकि वे बिना सूचना के बदल सकें, लेकिन वे वहां हैं यदि आपको वास्तव में स्कोप का सामना करना पड़ता है

 // get $$childHead first and then iterate that scope's $$nextSiblings for(var cs = scope.$$childHead; cs; cs = cs.$$nextSibling) { // cs is child scope } 

बेला

आप यह कोशिश कर सकते हैं:

 $scope.child = {} //declare it in parent controller (scope) 

फिर बच्चे नियंत्रक (क्षेत्र) में जोड़ें:

 var parentScope = $scope.$parent; parentScope.child = $scope; 

अब माता-पिता के पास बच्चे के दायरे तक पहुंच है।

एक संभावित समाधान, आईआईटी फ़ंक्शन के उपयोग से मूल नियंत्रक में बच्चे नियंत्रक को इंजेक्ट कर रहा है।

संभावित कार्यान्वयन:

 <div ng-controller="ParentController as parentCtrl"> ... <div ng-controller="ChildController as childCtrl" ng-init="ChildCtrl.init()"> ... </div> </div> 

आपके पास ChildController में कहां है:

 app.controller('ChildController', ['$scope', '$rootScope', function ($scope, $rootScope) { this.init = function() { $scope.parentCtrl.childCtrl = $scope.childCtrl; $scope.childCtrl.test = 'aaaa'; }; }]) 

तो अब ParentController आप उपयोग कर सकते हैं:

 app.controller('ParentController', ['$scope', '$rootScope', 'service', function ($scope, $rootScope, service) { this.save = function() { service.save({ a: $scope.parentCtrl.ChildCtrl.test }); }; }]) 

जरूरी:
ठीक से काम करने के लिए आपको निर्देशक ng-controller उपयोग करना होगा और प्रत्येक नियंत्रक का नाम बदलना होगा जैसे मैंने html में किया था।

सुझाव:
इस प्रक्रिया के दौरान क्रोम प्लगइन एनजी-इंस्पेक्टर का उपयोग करें। यह पेड़ को समझने में आपकी सहायता करेगा।

मुझे यकीन नहीं है कि आप माता-पिता से बच्चे के दायरे का उपयोग कर सकते हैं या नहीं, लेकिन यह संभव है। मुझे यह पता है क्योंकि मैंने इसे स्वयं किया है यहां मेरा परिदृश्य है:

मेरे पास एक ऐसा फ़ंक्शन होता है जो एक वेरिएबल के भीतर स्ट्रिंग बदलकर अपने पृष्ठों को नेविगेट करता है। कि वेरिएबल को मुख्य index.html फ़ाइल में एनजी-शामिल के रूप में संदर्भित किया गया है। इसलिए, जब स्ट्रिंग बदल जाती है, तो एक नई एचटीएमएल फाइल एनजी-इन में लोड होती है। उन HTML फ़ाइलों में से एक के अंदर मुझे एक और एनजी-शामिल है। पहली खिड़की के भीतर एक छोटे खिड़की के रूप में इस एक के बारे में सोचो। हर बार मैं इन विंडो में सामग्री बदलता हूं, मैंने भी एक साइड पैनल की सामग्री बदल दी है I यह साइड पैनल मूल स्तर पर है लेकिन, जब मैं माता-पिता के भीतर छोटी खिड़की में जाता हूं, तो माता-पिता की ओर की ओर वाले पैनल में नेविगेशन लिंक होता है जो छोटी खिड़की के भीतर चीजें बदलता है। चूंकि साइड पैनल मूल स्तर पर है और छोटी खिड़की के लिए नेविगेशन का ध्यान अपने ही नियंत्रक में बच्चे के स्तर पर किया जाता है, जब मैं साइड पैनल के लिंक पर क्लिक करता हूं तो उसे बच्चे नियंत्रक को संपादित करना पड़ता है यह खराब प्रोग्रामिंग हो सकता है ईमानदारी से, मैं नहीं जानता मैंने कुछ महीने पहले केवल आकांक्षाओं के साथ शुरुआत की थी और अब भी मैं सीख रहा हूं। लेकिन, यह मेरे परिदृश्य के लिए काम करने के लिए, मैंने माता-पिता के दायरे में एक फ़ंक्शन बनाया, जिसे कहा जाता है कि जब बच्चे का विस्तार होता है:

 function parent($scope, service) { setCurrentChildController = function (childScope) { this.$scope.childScope = childScope; } } function child($scope) { scope.$parent.setCurrentChildController($scope); } 

इसलिए, अब माता-पिता के दायरे का वेरिएबल $ scope.childScope मूलतः बच्चे नियंत्रक का दायरा है इसका उपयोग बच्चे के क्षेत्र में सभी चर और कार्यों के लिए है। अगर यह खराब प्रोग्रामिंग है और कोई भी मेरे परिदृश्य के साथ समस्या के वैकल्पिक हल के साथ आ सकता है जो महान होगा लेकिन, यदि आवश्यक हो तो यह काम करता है।

हां, हम बच्चे नियंत्रक से चर को माता-पिता के नियंत्रक के चर में आवंटित कर सकते हैं। यह एक संभव तरीका है:

अवलोकन: नीचे दिए गए कोड का मुख्य उद्देश्य, बाल नियंत्रक का $ स्कोप असाइन करना है। पेरेंट कंट्रोलर का $ स्कोप.सस्ता

स्पष्टीकरण: दो नियंत्रक हैं एचटीएमएल में, नोट करें कि पेरेंट कंट्रोलर बच्चे नियंत्रक को संलग्न करता है। इसका अर्थ है कि मूल नियंत्रक को बच्चे नियंत्रक से पहले निष्पादित किया जाएगा। तो, पहले सेट वैल्यू () को परिभाषित किया जाएगा और फिर नियंत्रण बच्चे नियंत्रक पर जाएंगे। $ स्कोप.वर्वनीय को "बाल" के रूप में निर्दिष्ट किया जाएगा फिर यह बच्चा गुंजाइश पैरेंट कंट्रोलर के फ़ंक्शन को एक तर्क के रूप में पारित किया जाएगा, जहां $ scope.assign को "child" के रूप में मान मिलेगा

 <!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script type="text/javascript"> var app = angular.module('myApp',[]); app.controller('child',function($scope){ $scope.variable = "child"; $scope.$parent.setValue($scope); }); app.controller('parent',function($scope){ $scope.setValue = function(childscope) { $scope.assign = childscope.variable; } }); </script> <body ng-app="myApp"> <div ng-controller="parent"> <p>this is parent: {{assign}}</p> <div ng-controller="child"> <p>this is {{variable}}</p> </div> </div> </body> </html>