चाइल्ड स्कोप में परिभाषित विधि को उसके मूल स्कोप से कैसे कह सकते हैं?
function ParentCntl() {
// I want to call the $scope.get here
}
function ChildCntl($scope) {
$scope.get = function() {
return "LOL";
}
}
चाइल्ड स्कोप में परिभाषित विधि को उसके मूल स्कोप से कैसे कह सकते हैं?
function ParentCntl() {
// I want to call the $scope.get here
}
function ChildCntl($scope) {
$scope.get = function() {
return "LOL";
}
}
जवाबों:
आप $broadcast
माता-पिता से एक बच्चे के लिए उपयोग कर सकते हैं :
function ParentCntl($scope) {
$scope.msg = "";
$scope.get = function(){
$scope.$broadcast ('someEvent');
return $scope.msg;
}
}
function ChildCntl($scope) {
$scope.$on('someEvent', function(e) {
$scope.$parent.msg = $scope.get();
});
$scope.get = function(){
return "LOL";
}
}
वर्किंग फिडल: http://jsfiddle.net/wUPdW/2/
अद्यतन : एक और संस्करण है, कम युग्मित और अधिक परीक्षण योग्य:
function ParentCntl($scope) {
$scope.msg = "";
$scope.get = function(){
$scope.$broadcast ('someEvent');
return $scope.msg;
}
$scope.$on('pingBack', function(e,data) {
$scope.msg = data;
});
}
function ChildCntl($scope) {
$scope.$on('someEvent', function(e) {
$scope.$emit("pingBack", $scope.get());
});
$scope.get = function(){
return "LOL";
}
}
$scope.$parent
या इन $scope.$parent.$parent
आदि)? आह, हाँ: परमेस में एक कॉलबैक पास! :)
$emit
बच्चे से लेकर माता-पिता तक। मुझे लगता है कि यह मेरे उत्तर को अद्यतन करने का समय है ..
$parent
) जोड़ा
मुझे एक और उपाय सुझाने दें:
var app = angular.module("myNoteApp", []);
app.controller("ParentCntl", function($scope) {
$scope.obj = {};
});
app.controller("ChildCntl", function($scope) {
$scope.obj.get = function() {
return "LOL";
};
});
कम कोड और प्रोटोटाइप विरासत का उपयोग कर।
$scope.obj.get()
कि एक मान्य फ़ंक्शन होने तक मतदान होता रहता है।
बच्चे के शुरुआती होने पर माता-पिता पर बच्चे के कार्य को पंजीकृत करें। मैंने टेम्पलेट में स्पष्टता के लिए "के रूप में" संकेतन का उपयोग किया।
खाका
<div ng-controller="ParentCntl as p">
<div ng-controller="ChildCntl as c" ng-init="p.init(c.get)"></div>
</div>
नियंत्रकों
...
function ParentCntl() {
var p = this;
p.init = function(fnToRegister) {
p.childGet = fnToRegister;
};
// call p.childGet when you want
}
function ChildCntl() {
var c = this;
c.get = function() {
return "LOL";
};
}
"लेकिन", आप कहते हैं, " ng-init
इस तरह से इस्तेमाल नहीं किया जाना चाहिए !"। खैर, हां, लेकिन
मैं कहता हूं कि यह इसके लिए एक अच्छा उपयोग है। यदि आप मुझे नीचा दिखाना चाहते हैं, तो कृपया कारणों के साथ टिप्पणी करें! :)
मुझे यह दृष्टिकोण पसंद है क्योंकि यह घटकों को अधिक मॉड्यूलर रखता है। केवल बाइंडिंग टेम्पलेट में हैं, और इसका मतलब है कि
यह दृष्टिकोण अधिक बारीकी से टेरो के विचारों को निर्देश के साथ संशोधित करने का विचार करता है (ध्यान दें कि उनके मॉड्यूलर उदाहरण में, contestants
माता-पिता से "बच्चे" निर्देश पर पारित हो गया है)।
वास्तव में एक अन्य समाधान ChildCntl
एक निर्देश के रूप में लागू करने पर विचार करना और विधि &
को पंजीकृत करने के लिए बाध्यकारी का उपयोग करना हो सकता है init
।
आप बच्चे को वस्तु बना सकते हैं।
var app = angular.module("myApp", []);
app.controller("ParentCntl", function($scope) {
$scope.child= {};
$scope.get = function(){
return $scope.child.get(); // you can call it. it will return 'LOL'
}
// or you can call it directly like $scope.child.get() once it loaded.
});
app.controller("ChildCntl", function($scope) {
$scope.obj.get = function() {
return "LOL";
};
});
यहां बच्चा पाने का तरीका साबित हो रहा है।