কৌণিক জেএস মধ্যে নিয়ন্ত্রণকারীদের মধ্যে তথ্য পাস?


243

আমার কাছে একটি বেসিক কন্ট্রোলার রয়েছে যা আমার পণ্যগুলি প্রদর্শন করে,

App.controller('ProductCtrl',function($scope,$productFactory){
     $productFactory.get().success(function(data){
           $scope.products = data;
     });
});

আমার দৃষ্টিতে আমি এই পণ্যগুলিকে একটি তালিকায় প্রদর্শিত করছি

<ul>
    <li ng-repeat="product as products">
        {{product.name}}
    </li>
</ul

আমি যা করার চেষ্টা করছি তা হল যখন কেউ পণ্যের নামের উপর ক্লিক করেন, তখন আমার কাছে আরও একটি ভিউ আছে যার নামের সাথে এই পণ্যটি যুক্ত করা হয়েছে।

 <ul class="cart">
      <li>
          //click one added here
      </li>
      <li>
          //click two added here
      </li>
 </ul>

সুতরাং আমার সন্দেহ এখানে, কীভাবে এই ক্লিক করা পণ্যগুলি প্রথম নিয়ামক থেকে দ্বিতীয়টিতে পাস করবেন? আমি ধরে নিয়েছি যে কার্টটিও একটি নিয়ামক হওয়া উচিত।

আমি নির্দেশ ব্যবহার করে ক্লিক ইভেন্টটি পরিচালনা করি। এছাড়াও আমি অনুভব করি যে উপরের কার্যকারিতা অর্জনের জন্য আমার পরিষেবাটি ব্যবহার করা উচিত ঠিক কীভাবে তা বোঝা যায় না? কার্ট কারটি পৃষ্ঠাটির ব্যবহারকারীদের উপর নির্ভর করে যুক্ত হওয়া সংখ্যক পণ্যগুলির সংখ্যার 5/10 হতে পারে। সুতরাং আমি এই জেনেরিক রাখতে চাই।

হালনাগাদ:

আমি সম্প্রচারের জন্য একটি পরিষেবা তৈরি করেছি এবং দ্বিতীয় নিয়ামকটিতে আমি এটি গ্রহণ করি। এখন প্রশ্নটি কীভাবে আমি ডোম আপডেট করব? যেহেতু আমার পণ্যটি ছেড়ে দেওয়ার তালিকাটি বেশ হার্ডকডযুক্ত।


উত্তর:


322

বর্ণনা থেকে মনে হচ্ছে আপনার কোনও পরিষেবা ব্যবহার করা উচিত। পরীক্ষা করে দেখুন http://egghead.io/lessons/angularjs-sharing-data-between-controllers এবং AngularJS পরিষেবা কন্ট্রোলার মধ্যে ডেটা পাসিং কিছু উদাহরণ দেখুন।

আপনি আপনার পণ্য পরিষেবাটি (কারখানা হিসাবে) সংজ্ঞায়িত করতে পারেন:

app.factory('productService', function() {
  var productList = [];

  var addProduct = function(newObj) {
      productList.push(newObj);
  };

  var getProducts = function(){
      return productList;
  };

  return {
    addProduct: addProduct,
    getProducts: getProducts
  };

});

নির্ভরতা উভয় নিয়ামক মধ্যে পরিষেবা ইনজেক্ট।

আপনার মধ্যে ProductControllerকিছু ক্রিয়া সংজ্ঞায়িত করুন যা নির্বাচিত বস্তুকে অ্যারেতে যুক্ত করবে:

app.controller('ProductController', function($scope, productService) {
    $scope.callToAddToProductList = function(currObj){
        productService.addProduct(currObj);
    };
});

আপনার মধ্যে CartController, পরিষেবা থেকে পণ্যগুলি পান:

app.controller('CartController', function($scope, productService) {
    $scope.products = productService.getProducts();
});

3
গেটপ্রডাক্টস () বলা হয়ে গেলে কার্ট নিয়ামক একবার আপডেট হবে? নাকি প্রতিবার নতুন পণ্য যুক্ত হচ্ছে?
কিশনিও

1
আপনি যদি এটি স্বয়ংক্রিয়ভাবে আপডেট হতে চান তবে আপনি ম্যাক্সিম শউস্টিনের উত্তর থেকে সম্প্রচারটি যুক্ত করতে পারেন এবং কার্টসিআরটিএলটির সুযোগ আপডেট করার জন্য function অন ফাংশনের মধ্যে getProducts () কল করতে পারেন।
Chalise

2
@ ক্রিলগার আপনি সম্পূর্ণরূপে সঠিক, এটি প্রাথমিকভাবে উপেক্ষা করা হয়েছিল। আমি একটি কার্যক্ষম সমাধান প্রতিফলিত করার জন্য উত্তরটি সম্পাদনা করেছি।
Chalise

1
@ দেবেশম হ্যাঁ, আপনার পরামর্শ অনুসারে করুন। আপনি পদ্ধতিগুলি প্রসারিত করার বিষয়ে বিবেচনা করতে পারেন যাতে তারা কেবল মেমরিতে ডেটা রাখে না এবং আরও ধৈর্য ধরে থাকে ( $httpউদাহরণস্বরূপ কলের মাধ্যমে সার্ভারে সংরক্ষণ করুন )।
Chalise

1
আমার কাছে উদাহরণস্বরূপ 2 প্রোডাক্ট নিয়ন্ত্রণকারী এবং 2 টি গাড়ি থাকলে কী হয়? দু'জনেরই যোগ হবে উপাদান? এই ক্ষেত্রে আপনি কীভাবে এটি সমাধান করবেন?
এথোথ

67

এই ক্লিক করা পণ্যগুলিকে প্রথম নিয়ামক থেকে দ্বিতীয় স্থানে কীভাবে পাস করবেন?

ক্লিকে আপনি সেই পদ্ধতিতে কল করতে পারেন যা সম্প্রচারের জন্য আহ্বান জানায় :

$rootScope.$broadcast('SOME_TAG', 'your value');

এবং দ্বিতীয় নিয়ামক এই ট্যাগটিতে এইভাবে শুনবেন:

$scope.$on('SOME_TAG', function(response) {
      // ....
})

যেহেতু আমরা পরিষেবাগুলিতে $ স্কোপ ইনজেক্ট করতে পারি না, তাই সিঙ্গলটন-স্কোপের মতো কিছুই নেই।

তবে আমরা ইনজেকশন দিতে পারি $rootScope। সুতরাং আপনি যদি পরিষেবাটিতে মান সঞ্চয় করেন তবে আপনি $rootScope.$broadcast('SOME_TAG', 'your value');পরিষেবা বডিটিতে চালাতে পারেন । (পরিষেবাদি সম্পর্কে @ চ্যারেক্সের বিবরণ দেখুন)

app.service('productService',  function($rootScope) {/*....*/}

$ সম্প্রচার , mit নির্গত সম্পর্কে ভাল অনুগ্রহ করে পরীক্ষা করুন


1
হ্যাঁ, আমি কারখানার ব্যবহার করছি? কেবলমাত্র একটি শেষ জিনিস যেখানে আমি আটকে গিয়েছি আমি প্রতিবার পণ্যটিতে ক্লিক করার সাথে সাথে নতুন কন্ট্রোলারে ডেটা পাই। এখন আমি কীভাবে এটি ডিওমে আপডেট করব? কারণ আমি ইতিমধ্যে সীমান্তের সাথে 5 টি হার্ডকোডযুক্ত তালিকা বলি যাতে প্রতিটি পণ্যগুলি তাদের ভিতরে যেতে পারে
kishanio

1
@ কেটি - আপনি কি কখনও উত্তর পেয়েছেন? এটি একটি সুস্পষ্ট প্রশ্নের মতো মনে হচ্ছে তবে আমি উত্তর কোথাও পাই না। আমি একটি নিয়ামক কিছু মান পরিবর্তন করতে চান। যখন এই অ্যাপ্লিকেশনটির মান পরিবর্তন হয় তখন অন্য যে কোনও শ্রোতা নিয়ন্ত্রককে তাদের প্রয়োজনীয় হিসাবে নিজেকে আপডেট করা উচিত। খুঁজে পাচ্ছি না।
রাদদেবস

2
আপনার দিবসে উত্তর দিন আপনার কী নিয়ন্ত্রণকারীর কাঠামোর উপর ভিত্তি করে: সমান্তরাল বা শিশু-পিতামাতা। $rootScope.$broadcastসমান্তরাল কাঠামো ওরফে একই স্তরের সমস্ত কন্ট্রোলারকে অবহিত করে।
ম্যাক্সিম শৌস্টিন

@ এসএমএস উত্তরের জন্য ধন্যবাদ। $ ঘড়ি ব্যবহার করে এটি করার কোনও উপায় আছে? বিটিডাব্লু, মাইন সমান্তরাল নিয়ন্ত্রক এবং আমি আপনার পদ্ধতিটি ব্যবহার করে এটি পেয়েছি। আমার জন্য, যখনই আমি দ্বিতীয় কন্ট্রোলারে $ ঘড়ির সাথে সম্পর্কিত পদ্ধতিটি $ ওয়াচ (এমনকি $ রুটস্কোপ) যুক্ত করার চেষ্টা করি তখনই প্রথমবার (২ য় নিয়ামকের সূচনা) গুলি চালিত হত। ধন্যবাদ।
রাদেবাস

1
$watchমানটি $rootScopeস্তরে উপস্থিত থাকলে আমরা ব্যবহার করতে পারি । অন্যথায় কেবল সম্প্রচার অন্য কন্ট্রোলারকে জানিয়ে দিতে পারে। এফওয়াইআই, যদি অন্য প্রোগ্রামার আপনার কোডটিতে দেখেন broadcast- আপনি কী করার চেষ্টা করছেন তার যুক্তি স্পষ্ট - "সম্প্রচার ইভেন্ট"। যাইহোক, আমার এক্সপ্রেস থেকে। এটি ব্যবহার করার rootscopeজন্য ভাল অনুশীলন না watch। "প্রথমবার কেবল আগুন" সম্পর্কে: এই উদাহরণটি একবার দেখুন: plnkr.co/edit/5zqkj7iYloeHYkzK1Prt?p= পূর্বরূপ দেখুন আপনার পুরানো এবং নতুন মান আছে। নিশ্চিত হয়ে নিন যে প্রতিবার আপনি নতুন মান পাবেন যা
পুরানোটির

24

Creating রুটস্কোপ ব্যবহার করে পরিষেবা তৈরি না করে সমাধান:

অ্যাপ্লিকেশন নিয়ন্ত্রণকারীদের জুড়ে বৈশিষ্ট্যগুলি ভাগ করতে আপনি কৌনিক $ রুটস্কোপ ব্যবহার করতে পারেন। এটি ডেটা ভাগ করে নেওয়ার জন্য এটি অন্য বিকল্প, যাতে এটি দেওয়া হয় যাতে লোকেরা এটি সম্পর্কে জানতে পারে।

কন্ট্রোলারগুলিতে কিছু কার্যকারিতা ভাগ করে নেওয়ার পছন্দের উপায়টি হ'ল পরিষেবাগুলি, আপনি ব্যবহার করতে পারেন এমন একটি বৈশ্বিক সম্পত্তি পড়া বা পরিবর্তন করা। রুটস্কোপ।

var app = angular.module('mymodule',[]);
app.controller('Ctrl1', ['$scope','$rootScope',
  function($scope, $rootScope) {
    $rootScope.showBanner = true;
}]);

app.controller('Ctrl2', ['$scope','$rootScope',
  function($scope, $rootScope) {
    $rootScope.showBanner = false;
}]);

কোনও টেমপ্লেটে $ রুটস্কোপ ব্যবহার করা হচ্ছে ($ মূল সহ বৈশিষ্ট্য অ্যাক্সেস করুন):

<div ng-controller="Ctrl1">
    <div class="banner" ng-show="$root.showBanner"> </div>
</div>

27
$rootScopeযতটা সম্ভব এড়ানো উচিত।
Shaz

1
@ শাজ আপনি কীভাবে বিস্তারিত বলতে পারেন?
মিরকো

5
@ মিরকো আপনার যতটা সম্ভব বৈশ্বিক রাষ্ট্র এড়ানোর চেষ্টা করা উচিত কারণ যে কেউ এটি পরিবর্তন করতে পারে - আপনার প্রোগ্রামের রাজ্যটিকে অনির্দেশ্য হিসাবে তৈরি করে।
উমুত সাত

4
$ রুটস্কোপের গ্লোবাল স্কোপ রয়েছে, তাই দেশীয় গ্লোবাল ভেরিয়েবলগুলির মতো আমাদের এগুলি সাবধানতার সাথে ব্যবহার করতে হবে। যদি কোনও নিয়ামক এর মান পরিবর্তন করে তবে এটি বিশ্বব্যাপী সুযোগের জন্য পরিবর্তিত হবে।
সঞ্জীব

1
পরিষেবাদি এবং কারখানাগুলি উভয়ই সিঙ্গলটন, তবে আপনি নিজের কন্ট্রোলারে কোনও পরিষেবা ইনজেকশন করতে বা না বেছে নিতে পারেন। তবে সমস্ত শিশুর স্কোপগুলি রুটস্কোপ থেকে প্রাপ্ত এবং প্রোটোটাইপিকাল চেইন অনুসরণ করে। সুতরাং আপনি যদি নিজের সুযোগে কোনও সম্পত্তি অ্যাক্সেস করার চেষ্টা করেন এবং এটি উপস্থিত না থাকে তবে এটি চেইনটি সন্ধান করবে। আপনি অযাচিতভাবে রুটস্কোপের সম্পত্তি পরিবর্তন করতে পারেন এমন সম্ভাবনা রয়েছে।
সঞ্জীব

16

আপনি দুটি পদ্ধতিতে এটি করতে পারেন।

  1. ব্যবহার করে $rootscope, কিন্তু আমি এটি সুপারিশ করি না। $rootScopeউপরের সবচেয়ে সুযোগ নেই। একটি অ্যাপ্লিকেশনটিতে কেবল একটি থাকতে $rootScopeপারে যা কোনও অ্যাপ্লিকেশানের সমস্ত উপাদানগুলির মধ্যে ভাগ করা হবে। সুতরাং এটি বিশ্বব্যাপী ভেরিয়েবলের মতো কাজ করে।

  2. পরিষেবা ব্যবহার করে। আপনি দুটি নিয়ামকের মধ্যে একটি পরিষেবা ভাগ করে এটি করতে পারেন। পরিষেবার কোডটি এর মতো দেখতে পারে:

    app.service('shareDataService', function() {
        var myList = [];
    
        var addList = function(newObj) {
            myList.push(newObj);
        }
    
        var getList = function(){
            return myList;
        }
    
        return {
            addList: addList,
            getList: getList
        };
    });
    

    আপনি আমার ফিজল দেখতে পারেন এখানে


এবং একটি তৃতীয় বিকল্প, আপনি ইভেন্টটি পাঠাতে পারেন, কেবল তালিকায় যুক্ত করতে
দান্তে স্মিথ

যদি ব্যবহারকারী এই পৃষ্ঠাটি পুনঃতফসিল করেন? তারপরে প্রোডাক্টগুলি () আপনি কিছু দেবেন না! (আপনি সকল ব্যবহারকারীকে রিফ্রেশ না করার জন্য বলতে পারবেন না, আপনি কি পারেন?)
শ্রীধর ভাট

2
@ shreedharbhat প্রশ্নটি পৃষ্ঠা পুনরায় লোডগুলি জুড়ে থাকা তথ্য স্থির রাখার বিষয়ে নয়।
জ্যাক ভায়াল

9

নিয়ন্ত্রকদের মধ্যে ডেটা ভাগ করার একটি এমনকি সহজ উপায় নেস্টেড ডেটা স্ট্রাকচার ব্যবহার করা। পরিবর্তে, উদাহরণস্বরূপ

$scope.customer = {};

আমরা ব্যবহার করতে পারি

$scope.data = { customer: {} };

dataসম্পত্তি পিতা বা মাতা সুযোগ থেকে উত্তরাধিকারসূত্রে করা হবে যাতে আমরা তার ক্ষেত্র ওভাররাইট করতে পারেন অন্যান্য নিয়ন্ত্রকের থেকে এক্সেস রাখা।


1
কন্ট্রোলাররা প্যারেন্ট কন্ট্রোলার থেকে নিজস্ব স্কোপ থেকে স্কোপ বৈশিষ্ট্যের উত্তরাধিকারী হয়। ক্লিন! সরলতা এটিকে সুন্দর করে তোলে
কার্লোস আর বালেবোনা

এটা কাজ করতে পারবেন না। দ্বিতীয় নিয়ামকটিতে আমি $ স্কোপ.ডেটা ব্যবহার করি এবং এটি অপরিজ্ঞাত।
বার্ট ক্যালিক্স্টো

তিনি মনে করি নেস্টেড কন্ট্রোলারদের নিয়ে কথা বলছেন। আমারও তেমন ব্যবহার হয় না।
নরবার্ট নবার্টসন


5

আমরা সেশনে ডেটা সংরক্ষণ করতে পারি এবং প্রোগ্রামের বাইরে এটি যে কোনও জায়গায় ব্যবহার করতে পারি।

$window.sessionStorage.setItem("Mydata",data);

অন্য স্থান

$scope.data = $window.sessionStorage.getItem("Mydata");

4

আমি এখানে উত্তরগুলি দেখেছি, এবং এটি নিয়ন্ত্রণকারীদের মধ্যে ডেটা ভাগ করার প্রশ্নটির উত্তর দিচ্ছে, তবে যদি আমি কোনও নিয়ামক অন্যটি তথ্য পরিবর্তিত হয়ে গেছে (সম্প্রচার ব্যবহার না করে) সম্পর্কে অবহিত করতে চান তবে আমার কী করা উচিত? সহজ! কেবল বিখ্যাত দর্শনার্থীর প্যাটার্নটি ব্যবহার করে:

myApp.service('myService', function() {

    var visitors = [];

    var registerVisitor = function (visitor) {
        visitors.push(visitor);
    }

    var notifyAll = function() {
        for (var index = 0; index < visitors.length; ++index)
            visitors[index].visit();
    }

    var myData = ["some", "list", "of", "data"];

    var setData = function (newData) {
        myData = newData;
        notifyAll();
    }

    var getData = function () {
        return myData;
    }

    return {
        registerVisitor: registerVisitor,
        setData: setData,
        getData: getData
    };
}

myApp.controller('firstController', ['$scope', 'myService',
    function firstController($scope, myService) {

        var setData = function (data) {
            myService.setData(data);
        }

    }
]);

myApp.controller('secondController', ['$scope', 'myService',
    function secondController($scope, myService) {

        myService.registerVisitor(this);

        this.visit = function () {
            $scope.data = myService.getData();
        }

        $scope.data = myService.getData();
    }
]);

এই সাধারণ পদ্ধতিতে, একটি নিয়ামক আরেকটি নিয়ামককে আপডেট করতে পারে যে কিছু ডেটা আপডেট হয়েছে।


2
পর্যবেক্ষক প্যাটার্ন ( en.wikedia.org/wiki/Observer_ Pattern ) এখানে কি আরও প্রাসঙ্গিক হবে না? দর্শনার্থীর ধরণটি অন্যরকম ... en.wikiki.org/wiki/Visitor_
পিপীলিকা কুটসচের

3

আমি একটি কারখানা তৈরি করেছি যা রুটের পথের প্যাটার্নের মধ্যে ভাগ করে নেওয়া স্কোপকে নিয়ন্ত্রণ করে, তাই আপনি যখন একই পথের প্যারেন্ট পাথটিতে নেভিগেট করেন তখন আপনি ভাগ করা ডেটা বজায় রাখতে পারেন।

.controller('CadastroController', ['$scope', 'RouteSharedScope',
    function($scope, routeSharedScope) {
      var customerScope = routeSharedScope.scopeFor('/Customer');
      //var indexScope = routeSharedScope.scopeFor('/');
    }
 ])

সুতরাং, যদি ব্যবহারকারী অন্য কোনও রুটে যায়, উদাহরণস্বরূপ '/ সমর্থন', '/ গ্রাহক' পথের জন্য ভাগ করা ডেটা স্বয়ংক্রিয়ভাবে ধ্বংস হয়ে যাবে। তবে এর পরিবর্তে যদি ব্যবহারকারী 'শিশু' পথে চলে যায়, যেমন '/ গ্রাহক / 1' বা '/ গ্রাহক / তালিকার' মতো স্কোপটি নষ্ট হবে না।

আপনি এখানে একটি নমুনা দেখতে পারেন: http://plnkr.co/edit/OL8of9


3

1

using $localStorage

app.controller('ProductController', function($scope, $localStorage) {
    $scope.setSelectedProduct = function(selectedObj){
        $localStorage.selectedObj= selectedObj;
    };
});

app.controller('CartController', function($scope,$localStorage) { 
    $scope.selectedProducts = $localStorage.selectedObj;
    $localStorage.$reset();//to remove
});

2

ক্লিকে আপনি সেই পদ্ধতিতে কল করতে পারেন যা সম্প্রচারের জন্য আহবান করে:

$rootScope.$broadcast('SOME_TAG', 'your value');

and the second controller will listen on this tag like:
$scope.$on('SOME_TAG', function(response) {
      // ....
})

3

using $rootScope:

4

window.sessionStorage.setItem("Mydata",data);
$scope.data = $window.sessionStorage.getItem("Mydata");

5

কৌণিক পরিষেবাটি ব্যবহার করার একটি উপায়:

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

app.controller('one', function($scope, ser1){
$scope.inputText = ser1;
});

app.controller('two',function($scope, ser1){
$scope.inputTextTwo = ser1;
});

app.factory('ser1', function(){
return {o: ''};
});

2
আপনার উত্তরে আরও কিছু ব্যাখ্যা রাখুন।
জেরহার্ড বার্নার্ড

2

আপনার মডিউলে একটি কারখানা তৈরি করুন এবং কন্ট্রোলারে কারখানার একটি রেফারেন্স যুক্ত করুন এবং কন্ট্রোলারে এর ভেরিয়েবলগুলি ব্যবহার করুন এবং এখন আপনি যেখানে চান সেখানে রেফারেন্স যুক্ত করে এখন অন্য নিয়ামকের তথ্যের মান পান


2

আমি জানি না এটি কারও সাহায্য করবে কিনা, তবে চার্জের (ধন্যবাদ!) উত্তরের ভিত্তিতে আমি সাধারণ ক্যাশে পরিষেবা তৈরি করেছি। ব্যবহার, রিমিক্স এবং ভাগ নির্দ্বিধায়:

angular.service('cache', function() {
    var _cache, _store, _get, _set, _clear;
    _cache = {};

    _store = function(data) {
        angular.merge(_cache, data);
    };

    _set = function(data) {
        _cache = angular.extend({}, data);
    };

    _get = function(key) {
        if(key == null) {
            return _cache;
        } else {
            return _cache[key];
        }
    };

    _clear = function() {
        _cache = {};
    };

    return {
        get: _get,
        set: _set,
        store: _store,
        clear: _clear
    };
});

2

কৌণিক পরিষেবাটি ব্যবহার করার একটি উপায়:

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

app.controller('one', function($scope, ser1){
$scope.inputText = ser1;
});


app.controller('two',function($scope, ser1){
$scope.inputTextTwo = ser1;
});

app.factory('ser1', function(){
return {o: ''};
});



<div ng-app='home'>

<div ng-controller='one'>
  Type in text: 
  <input type='text' ng-model="inputText.o"/>
</div>
<br />

<div ng-controller='two'>
  Type in text:
  <input type='text' ng-model="inputTextTwo.o"/>
</div>

</div>

https://jsfiddle.net/1w64222q/


1

এফওয়াইআই $ স্কোপ অবজেক্টটির $ এমিট, $ সম্প্রচার, AND এবং এবং $ রুটস্কোপ অবজেক্টটির অভিন্ন $ এমিট, $ সম্প্রচার, has রয়েছে

এখানে কৌণিক নকশা প্যাটার্ন প্রকাশ / সাবস্ক্রাইব সম্পর্কে আরও পড়ুন


1

@ ম্যাক্সিম proposed ব্রডকাস্ট ব্যবহার করে প্রস্তাবিত সমাধানটির উন্নতি করতে ডেটা পরিবর্তন করবেন না প্রেরণ করুন

$rootScope.$broadcast('SOME_TAG', 'my variable');

কিন্তু শোনার ডেটা

$scope.$on('SOME_TAG', function(event, args) {
    console.log("My variable is", args);// args is value of your variable
})

1

এটি করার তিনটি উপায় রয়েছে,

ক) একটি পরিষেবা ব্যবহার করে

খ) নিয়ামক স্কোপের মধ্যে পিতামাতার / সন্তানের সম্পর্কের উপর নির্ভরশীল Exp

সি) কৌণিক 2.0 তে "হিসাবে" কীওয়ার্ডটি একটি নিয়ামক থেকে অন্যটিতে ডেটা পাস করবে।

উদাহরণ সহ আরও তথ্যের জন্য, দয়া করে নীচের লিঙ্কটি চেক করুন:

http://www.tutespace.com/2016/03/angular-js.html


0
var custApp = angular.module("custApp", [])
.controller('FirstController', FirstController)
.controller('SecondController',SecondController)
.service('sharedData', SharedData);

FirstController.$inject = ['sharedData'];
function FirstController(sharedData) {
this.data = sharedData.data;
}

SecondController.$inject['sharedData'];
function SecondController(sharedData) {
this.data = sharedData.data;
}

function SharedData() {
this.data = {
    value: 'default Value'
}
}

প্রথম নিয়ামক

<div ng-controller="FirstController as vm">
<input type=text ng-model="vm.data.value" />
</div>

দ্বিতীয় নিয়ামক

 <div ng-controller="SecondController as vm">
    Second Controller<br>
    {{vm.data.value}}
</div>

-1

আমি মনে করি

সবচেয়ে ভালো উপায়

লোকালস্টোরেজ ব্যবহার করা use (সারাক্ষণ কাজ করে)

app.controller('ProductController', function($scope, $localStorage) {
    $scope.setSelectedProduct = function(selectedObj){
        $localStorage.selectedObj= selectedObj;
    };
});

আপনার কার্ডকন্ট্রোলার হবে

app.controller('CartController', function($scope,$localStorage) { 
    $scope.selectedProducts = $localStorage.selectedObj;
    $localStorage.$reset();//to remove
});

আপনি যোগ করতে পারেন

if($localStorage.selectedObj){
    $scope.selectedProducts = $localStorage.selectedObj;
}else{
    //redirect to select product using $location.url('/select-product')
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.