javascript कोणीय जेएस में नियंत्रकों के बीच डेटा साझा करना?




angularjs variables (2)

इसका उपयोग करने के लिए आपको सेवा को इंजेक्ट करने की आवश्यकता है, फिर सेवा चर तक पहुंचें।

demoModule.controller("demoContollerOne", function($scope, demoService) {
  $scope.oneFunction = function(){
    demoService.demoSharedVariable = $scope.oneInput;
  };
});

demoModule.controller("demoContollerTwo", function($scope, demoService) {
  $scope.twoFunction = function(){
    demoService.demoSharedVariable = $scope.twoInput;
  };
});

यदि आप नियंत्रक एएस का प्रयोग कर रहे हैं, तो आप शायद ही कभी (या नहीं) को $ दायरे को इंजेक्ट करना और उपयोग करना होगा नियंत्रक के रूप में एक अपेक्षाकृत नई सुविधा है, वापस तो हमारे पास $ विकल्प का उपयोग करने के लिए कोई विकल्प नहीं है, इसलिए यह $ गुंजाइश के साथ उदाहरण खोजने के लिए अजीब नहीं है।

संपादित करें: यदि आप नियंत्रक का उपयोग नहीं कर रहे हैं (जैसे कि इस उदाहरण में) आपको दृश्य में फ़ंक्शन या वेरिएबल को प्रदर्शित करने के लिए $ दायरे की आवश्यकता होगी।

कई जगहें हैं जो सही नहीं हैं, इसके साथ नगण्य होने पर मैंने पाया है, मैं कोड को संपादित करूंगा। मुझे पता नहीं है कि उन्नत विचार जैसे कि $ वॉच का इस्तेमाल किए बिना प्रभाव दिखाने के लिए, कृपया अपना खुद का बेला प्रदान करें यदि आप समझ नहीं पाते हैं।

Jsbin

https://code.i-harness.com

इससे पहले कि इसे डुप्लिकेट के रूप में चिह्नित किया गया है, मैंने कुछ समान प्रश्नों को पढ़ा है, लेकिन मेरे पास जो भी उत्तर मिले हैं, वे $ दायरे का इस्तेमाल करते हैं, और दस्तावेज पढ़ने के बाद मुझे वाकई यकीन नहीं है कि मैं $ गुंजाइश समझता हूं, डी इस स्थिति में इसे इस्तेमाल करते हैं

मुझे यह ट्यूटोरियल मिला है जो बताता है कि मैं क्या करने की कोशिश कर रहा हूं।

हालांकि, यह डेटा के एक सरणी का उपयोग कर रहा है मुझे सिर्फ एक ठोस चर की आवश्यकता है इसके अलावा, मुझे नहीं मालूम कि वह फैक्ट्री सर्विस के लिए अतिरिक्त ऑब्जेक्ट क्यों बना रहा है; क्यों न सिर्फ कारखाने को ऑब्जेक्ट के रूप में उपयोग करें?

मैं सोच रहा था कि मैं ऐसा कुछ कर सकता हूं, लेकिन मुझे यकीन नहीं है कि यह काम करेगा या नहीं।

मेरा कारखाना / सेवा बनाना:

var demoModule = angular.module("demoModule", []);

demoModule.factory("demoService", function() {
     var demoSharedVariable = null;
     return demoSharedVariable;
});

प्रत्येक नियंत्रक में साझा किए गए चर तक पहुंच:

var demoControllerOne = demoModule.controller("demoContollerOne", function(demoSharedVariable) {
     this.oneFunction = function(oneInput){
          demoSharedVariable = oneInput;
     };
});

var demoControllerTwo = demoModule.controller("demoContollerTwo", function(demoSharedVariable) {
     this.twoFunction = function(twoInput){
          demoSharedVariable = twoInput;
     };
});

क्या इस पद्धति ने साझा किए गए चर का उत्पादन किया होगा?


एक महत्वपूर्ण बात यह है कि यदि आप कोणीय का उपयोग करना चाहते हैं, तो आपको गुंजाइश के ज्ञान को समझना होगा।

चूंकि न तो आप कारखाना या नियंत्रक सही हैं, मैं आपको सेवा समझने में आपकी मदद करने के लिए एक सरल उदाहरण लिखूंगा:

इस plnkr में विस्तार कार्यान्वयन :

सर्विस:

angular.module('myApp').service('MyService', [function() {

      var yourSharedVariable; // Your shared variable

      //Provide the setter and getter methods
      this.setSharedVariable = function (newVal) {
        yourSharedVariable = newVal;
      };

      this.getSharedVariable = function () {
        return yourSharedVariable;
      };

    }
]);

नियंत्रक:

myApp.controller('Ctrl2', ['$scope', 'MyService', '$window', function($scope, MyService, $window) {//inject MyService into the controller
    $scope.setShared = function(val) {
      MyService.setSharedVariable(val);
    };

    $scope.getShared = function() {
      return MyService.getSharedVariable();
    };

    $scope.alertSharedVariable = function () {
      $window.alert(MyService.getSharedVariable());
    };

}]);




controller