AngularJS एक पृष्ठ के भीतर कई एनजी अनुप्रयोग


180

मैंने केवल कोणीय जेएस सीखना शुरू कर दिया है और कुछ बुनियादी नमूने बनाए हैं हालांकि मैं निम्नलिखित समस्या के साथ फंस गया हूं।

मैंने 2 मॉड्यूल और 2 कंट्रोलर बनाए हैं।

shoppingCart -> ShoppingCartController
namesList -> NamesController

प्रत्येक नियंत्रक के लिए संबद्ध विचार हैं। पहला दृश्य ठीक प्रतिपादन करता है, लेकिन दूसरा प्रतिपादन नहीं करता है। कोई त्रुटि नहीं हैं।

http://jsfiddle.net/ep2sQ/

कृपया इस मुद्दे को हल करने में मेरी मदद करें।

नियंत्रक से क्या मान पारित किए गए हैं, यह देखने के लिए कंसोल में जोड़ने की कोई संभावना है।

निम्नलिखित div में उदाहरण के लिए, हम कंसोल जोड़ सकते हैं और नियंत्रक मान को आउटपुट कर सकते हैं

<div ng-app="shoppingCart" ng-controller="ShoppingCartController">
</div>

10
यह मदद कर सकता है: stackoverflow.com/questions/12860595/…
चेर्निव

धन्यवाद चेर्निव। यह बहुत मददगार है और मैंने आपके द्वारा दिए गए लिंक का उपयोग करके समस्या को हल किया। कृपया आप यह भी जानकारी प्रदान कर सकते हैं कि कंट्रोलर का उपयोग कैसे करें। व्यू / टेम्प्लेट के भीतर नियंत्रक को डंप करने के लिए {{कंसोल.लॉग}} काम नहीं कर रहा है।
नितिन मुकेश

आप का स्वागत है। ध्यान दें कि आप पहले से ही एक विचार में "कंसोल" कर रहे हैं, यह {{item.product_name}}वास्तव में आपके मॉडल से एक मूल्य "प्रिंट" करता है
चेर्निव

1
क्या वेबैप के लिए कई ऐप बनाने में कुछ गड़बड़ है? मेरे पास यह परियोजना है जहां प्रत्येक html पृष्ठ का अपना ऐप है, मैं जानना चाहता हूं कि क्या प्रदर्शन का वैसे भी प्रभाव होगा?
टी। रेक्स

जबकि प्रति पृष्ठ एक से अधिक AngularJS एप्लिकेशन को बूटस्ट्रैप करना संभव है, हम इस परिदृश्य के खिलाफ सक्रिय रूप से परीक्षण नहीं करते हैं। यह संभव है कि आप समस्याओं में भाग लेंगे, विशेष रूप से जटिल ऐप्स के साथ, इसलिए सावधानी बरतने की सलाह दी जाती है। AngularJS डेवलपर गाइड देखें - बूटस्ट्रैप
19 फरवरी को georgeawg

जवाबों:


190

इसलिए मूल रूप से चेर्निव द्वारा उल्लेख किया गया है, हमें एक ही पृष्ठ के भीतर कई एनजी-ऐप के लिए मॉड्यूल को बूटस्ट्रैप करना होगा। सभी आदानों के लिए बहुत धन्यवाद।

var shoppingCartModule = angular.module("shoppingCart", [])
shoppingCartModule.controller("ShoppingCartController",
  function($scope) {
    $scope.items = [{
      product_name: "Product 1",
      price: 50
    }, {
      product_name: "Product 2",
      price: 20
    }, {
      product_name: "Product 3",
      price: 180
    }];
    $scope.remove = function(index) {
      $scope.items.splice(index, 1);
    }
  }
);
var namesModule = angular.module("namesList", [])
namesModule.controller("NamesController",
  function($scope) {
    $scope.names = [{
      username: "Nitin"
    }, {
      username: "Mukesh"
    }];
  }
);
angular.bootstrap(document.getElementById("App2"), ['namesList']);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>

<div id="App1" ng-app="shoppingCart" ng-controller="ShoppingCartController">
  <h1>Your order</h1>
  <div ng-repeat="item in items">
    <span>{{item.product_name}}</span>
    <span>{{item.price | currency}}</span>
    <button ng-click="remove($index);">Remove</button>
  </div>
</div>

<div id="App2" ng-app="namesList" ng-controller="NamesController">
  <h1>List of Names</h1>
  <div ng-repeat="_name in names">
    <p>{{_name.username}}</p>
  </div>
</div>



33
कोणीय दस्तावेज़ीकरण कहता है कि जब मैन्युअल रूप से किसी ऐप को बूट किया जाता है, तो ngApp निर्देश का उपयोग करने के लिए नहीं। तो एनजी-ऐप = "नेमलिस्ट" (हो सकता है / चाहिए) फिर से। docs.angularjs.org/guide/bootstrap
Mike_K

4
जिन लोगों के पास एनजी-ऐप है, वे दो अलग-अलग जेएस फाइलों में नीचे दिए गए कोड को कोणीय (डाक्यूमेंट) पहले से ही काम कर सकते हैं। ;});
शिवशंगमुगम कन्नन

3
नोट: मेरे ऐप में, मुझे यह लाइन "angular.bootstrap (document.getElementById (" App2 "), ['nameList']]; $ में (दस्तावेज़)। पहले से ही कार्य
La masse

यह मेरे लिए काम नहीं कर रहा है। केवल पहली एनजी-ऐप सही ढंग से काम करती है
SIVAKUMAR.J

120

HTML डॉक्यूमेंट में कई एप्लिकेशन चलाने के लिए आपको angular.bootstrap () का उपयोग करके उन्हें मैन्युअल रूप से बूटस्ट्रैप करना होगा।

एचटीएमएल

<!-- Automatic Initialization -->
<div ng-app="myFirstModule">
    ...
</div>
<!-- Need To Manually Bootstrap All Other Modules -->
<div id="module2">
    ...
</div>

जे एस

angular.
  bootstrap(document.getElementById("module2"), ['mySecondModule']);

इसका कारण यह है कि प्रति HTML दस्तावेज़ में केवल एक ही AngularJS एप्लिकेशन को बूटस्ट्रैप किया जा सकता है। ng-appदस्तावेज़ में पहली बार पाया गया कि मूल तत्व को एक एप्लिकेशन के रूप में ऑटो-बूटस्ट्रैप में परिभाषित किया जाएगा।

दूसरे शब्दों में, जबकि तकनीकी रूप से प्रति पृष्ठ कई अनुप्रयोग होना संभव है, केवल एक एनजी-ऐप निर्देश स्वचालित रूप से तत्काल और कोणीय ढांचे द्वारा आरंभीकृत किया जाएगा।


20
प्रति HTML दस्तावेज़ में केवल एक ngAppनिर्देश ऑटो-बूटलोड किया जा सकता है लेकिन जब तक आप मैन्युअल रूप से बाद वाले को बूटस्ट्रैप करते हैं, तब तक आपके पास कई ऐप हो सकते हैं।
JaredMcAteer

@ कोडहॉट namesListतब मॉड्यूल कहां स्थित है? क्या आप अपना जवाब अपडेट कर सकते हैं, ताकि यह स्पष्ट हो सके?
यूजीन

ये गलत है। आपके पास कई एनजी-ऐप हो सकते हैं। देखें stackoverflow.com/a/24867989/753632
AndroidDev

3
@AndroidDev, मैं अनुसरण नहीं करता। आपके द्वारा संदर्भित लिंक में कई एनजी ऐप विशेषताओं को नहीं दिखाया गया है।
जेपीएन २०'१४

42

आप angular.bootstrap()सीधे उपयोग कर सकते हैं ... समस्या यह है कि आप निर्देशों का लाभ खो देते हैं।

सबसे पहले आपको इसे बूट करने के लिए HTML तत्व का संदर्भ प्राप्त करने की आवश्यकता है, जिसका अर्थ है कि आपका कोड अब आपके HTML में युग्मित हो गया है।

दूसरे, दोनों के बीच संबंध उतना स्पष्ट नहीं है। साथ ngAppआप स्पष्ट रूप से देख सकते हैं कि एचटीएमएल क्या मॉड्यूल के साथ जुड़ा हुआ है और आप जानते हैं, जहां कि जानकारी के लिए देखने के लिए। परंतुangular.bootstrap() अपने कोड में कहीं से भी मंगवाया जा सकता है।

यदि आप इसे करने के लिए जा रहे हैं तो सबसे अच्छा तरीका एक निर्देश का उपयोग करके होगा। जोकि मैंने किया था। इसे कहते हैं ngModule। यहाँ आपके कोड का उपयोग करने जैसा दिखेगा:

<!DOCTYPE html>
<html>
    <head>
        <script src="angular.js"></script>
        <script src="angular.ng-modules.js"></script>
        <script>
          var moduleA = angular.module("MyModuleA", []);
          moduleA.controller("MyControllerA", function($scope) {
              $scope.name = "Bob A";
          });

          var moduleB = angular.module("MyModuleB", []);
          moduleB.controller("MyControllerB", function($scope) {
              $scope.name = "Steve B";
          });
        </script>
    </head>
    <body>
        <div ng-modules="MyModuleA, MyModuleB">
            <h1>Module A, B</h1>
            <div ng-controller="MyControllerA">
                {{name}}
            </div>
            <div ng-controller="MyControllerB">
                {{name}}
            </div>
        </div>

        <div ng-module="MyModuleB">
            <h1>Just Module B</h1>
            <div ng-controller="MyControllerB">
                {{name}}
            </div>
        </div>
    </body>
</html>

आप इसके लिए स्रोत कोड प्राप्त कर सकते हैं:

http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/

इसे उसी तरह से लागू किया गया है ngApp। यह बस angular.bootstrap()पर्दे के पीछे कहता है ।


9

मेरे मामले में मुझे angular.element(document).readyकाम करने के लिए अपने दूसरे ऐप के बूटस्ट्रैपिंग को लपेटना पड़ा :

angular.element(document).ready(function() {
  angular.bootstrap(document.getElementById("app2"), ["app2"]);
});   

V1.6 पदावनत: प्रयोग angular.element(callback)के बजाय angular.element(document).ready(callback))AngularJS angular.element एपीआई संदर्भ देखें । इसके अलावा github.com/angular/angular.js/commit/…
georgeawg

7

यहाँ एक html पृष्ठ में दो अनुप्रयोगों और एक अनुप्रयोग में दो विजेता का उदाहरण दिया गया है:

    <div ng-app = "myapp">
      <div  ng-controller = "C1" id="D1">
         <h2>controller 1 in app 1 <span id="titre">{{s1.title}}</span> !</h2>
      </div>

      <div  ng-controller = "C2" id="D2">
         <h2>controller 2 in app 1 <span id="titre">{{s2.valeur}}</span> !</h2>
      </div>
    </div>
    <script>
        var A1 = angular.module("myapp", [])

        A1.controller("C1", function($scope) {
            $scope.s1 = {};
            $scope.s1.title = "Titre 1";
         });

        A1.controller("C2", function($scope) {
            $scope.s2 = {};
            $scope.s2.valeur = "Valeur 2";
         });
    </script>

    <div ng-app="toapp" ng-controller="C1" id="App2">
        <br>controller 1 in app 2
        <br>First Name: <input type = "text" ng-model = "student.firstName">
        <br>Last Name : <input type="text" ng-model="student.lastName">
        <br>Hello : {{student.fullName()}}
        <br>
    </div>

    <script>
        var A2 = angular.module("toapp", []);
        A2.controller("C1", function($scope) {
            $scope.student={
                firstName:"M",
                lastName:"E",
                fullName:function(){
                    var so=$scope.student;
                    return so.firstName+" "+so.lastName;
                }
            };
        });
        angular.bootstrap(document.getElementById("App2"), ['toapp']);
    </script>
<style>
    #titre{color:red;}
    #D1{ background-color:gray; width:50%; height:20%;}
    #D2{ background-color:yellow; width:50%; height:20%;}
    input{ font-weight: bold; }
</style>


6

आप एक रूटमॉड्यूल में कई मॉड्यूल को मर्ज कर सकते हैं, और उस मॉड्यूल को एनजी-ऐप के रूप में एक श्रेष्ठ तत्व पूर्व: बॉडी टैग में असाइन कर सकते हैं।

कोड पूर्व:

    <!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="namesController.js"></script>
<script src="myController.js"></script>
<script>var rootApp = angular.module('rootApp', ['myApp1','myApp2'])</script>
<body ng-app="rootApp">

<div ng-app="myApp1" ng-controller="myCtrl" >
First Name: <input type="text" ng-model="firstName"><br>
Last Name: <input type="text" ng-model="lastName"><br>
<br>
Full Name: {{firstName + " " + lastName}}
</div>

<div ng-app="myApp2" ng-controller="namesCtrl">
<ul>
  <li ng-bind="first">{{first}}
  </li>
</ul>
</div>

</body>
</html>

4
आप rootApp के अंदर दो अलग-अलग ऐप्स को नेस्ट कर रहे हैं, Angular ऐप्स के नेस्टिंग की अनुमति नहीं देता है
कोडिन

4

         var shoppingCartModule = angular.module("shoppingCart", [])
          shoppingCartModule.controller("ShoppingCartController",
           function($scope) {
             $scope.items = [{
               product_name: "Product 1",
               price: 50
             }, {
               product_name: "Product 2",
               price: 20
             }, {
               product_name: "Product 3",
               price: 180
             }];
             $scope.remove = function(index) {
               $scope.items.splice(index, 1);
             }
           }
         );
         var namesModule = angular.module("namesList", [])
          namesModule.controller("NamesController",
           function($scope) {
             $scope.names = [{
               username: "Nitin"
             }, {
               username: "Mukesh"
             }];
           }
         );


         var namesModule = angular.module("namesList2", [])
          namesModule.controller("NamesController",
           function($scope) {
             $scope.names = [{
               username: "Nitin"
             }, {
               username: "Mukesh"
             }];
           }
         );


         angular.element(document).ready(function() {
           angular.bootstrap(document.getElementById("App2"), ['namesList']);
           angular.bootstrap(document.getElementById("App3"), ['namesList2']);
         });
<!DOCTYPE html>
<html>

<head>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

</head>

<body>

  <div id="App1" ng-app="shoppingCart" ng-controller="ShoppingCartController">
    <h1>Your order</h1>
    <div ng-repeat="item in items">
      <span>{{item.product_name}}</span>
      <span>{{item.price | currency}}</span>
      <button ng-click="remove($index);">Remove</button>
    </div>
  </div>

  <div id="App2" ng-app="namesList" ng-controller="NamesController">
    <h1>List of Names</h1>
    <div ng-repeat="_name in names">
      <p>{{_name.username}}</p>
    </div>
  </div>
  <div id="App3" ng-app="namesList2" ng-controller="NamesController">
    <h1>List of Names</h1>
    <div ng-repeat="_name in names">
      <p>{{_name.username}}</p>
    </div>
  </div>


</body>

</html>


बस एक ही पृष्ठ में कई एनजी-ऐप के विस्तार के लिए मुझे सिर्फ saeb-amini और @Nithin मुकेश कोड दोनों को मिलाना था - धन्यवाद दोनों
प्रणीत

यह अवधारणा मेरे लिए काम कर रही है। angular.element (डॉक्यूमेंट) .ready (फंक्शन () {angular.bootstrap (document.getElementById ("App2"), ['namesList']); angular.bootstrap (डॉक्यूमेंट .getEyBd ("App3"), ['namesList2'; ]);});
SIVAKUMAR.J

2

केवल एक ऐप स्वचालित रूप से आरंभिक है। दूसरों को मैन्युअल रूप से आरंभिक रूप से निम्नानुसार करना होगा:

वाक्य - विन्यास:

angular.bootstrap(element, [modules]);

उदाहरण:

<!DOCTYPE html>
<html>

<head>
  <script src="https://code.angularjs.org/1.5.8/angular.js" data-semver="1.5.8" data-require="angular.js@1.5.8"></script>
  <script data-require="ui-router@0.2.18" data-semver="0.2.18" src="//cdn.rawgit.com/angular-ui/ui-router/0.2.18/release/angular-ui-router.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script>
    var parentApp = angular.module('parentApp', [])
  .controller('MainParentCtrl', function($scope) {
    $scope.name = 'universe';
  });



var childApp = angular.module('childApp', ['parentApp'])
  .controller('MainChildCtrl', function($scope) {
    $scope.name = 'world';
  });


angular.element(document).ready(function() {
  angular.bootstrap(document.getElementById('childApp'), ['childApp']);
});
    
  </script>
</head>

<body>
  <div id="childApp">
    <div ng-controller="MainParentCtrl">
      Hello {{name}} !
      <div>
        <div ng-controller="MainChildCtrl">
          Hello {{name}} !
        </div>
      </div>
    </div>
  </div>
</body>

</html>

AngularJS API


1

आप एक रूट एनजी ऐप को परिभाषित कर सकते हैं और इस एनजी ऐप में आप कई एनडी-कंट्रोलर को परिभाषित कर सकते हैं। ऐशे ही

    <!DOCTYPE html>
    <html>
    <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>

<style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }

         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }

         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>

     <script>
      var mainApp = angular.module("mainApp", []);

      mainApp.controller('studentController1', function ($scope) {
      $scope.student = {
      firstName: "MUKESH",
      lastName: "Paswan",

      fullName: function () {
         var studentObject;
         studentObject = $scope.student;
         return studentObject.firstName + " " + studentObject.lastName;
                     }
                 };
             });

             mainApp.controller('studentController2', function ($scope) {
                 $scope.student = {
                     firstName: "Mahesh",
                     lastName: "Parashar",
                     fees: 500,

                     subjects: [
                        { name: 'Physics', marks: 70 },
                        { name: 'Chemistry', marks: 80 },
                        { name: 'Math', marks: 65 },
                        { name: 'English', marks: 75 },
                        { name: 'Hindi', marks: 67 }
                     ],

                     fullName: function () {
                         var studentObject;
                         studentObject = $scope.student;
                         return studentObject.firstName + " " + studentObject.lastName;
                     }
                 };
             });
          </script>

    <body>
    <div ng-app = "mainApp">
    <div id="dv1"  ng-controller = "studentController1">
    Enter first name: <input type = "text" ng-model = "student.firstName"><br/><br/> Enter last name: <input type = "text" ng-model = "student.lastName"><br/>
    <br/>
     You are entering: {{student.fullName()}}
    </div>

    <div id="dv2" ng-controller = "studentController2">
     <table border = "0">
                <tr>
                   <td>Enter first name:</td>
                   <td><input type = "text" ng-model = "student.firstName"></td>
                </tr>

                <tr>
                   <td>Enter last name: </td>
                   <td>
                      <input type = "text" ng-model = "student.lastName">
                   </td>
                </tr>

                <tr>
                   <td>Name: </td>
                   <td>{{student.fullName()}}</td>
                </tr>

                <tr>
                   <td>Subject:</td>

                   <td>
                      <table>
                         <tr>
                            <th>Name</th>.
                            <th>Marks</th>
                         </tr>

                         <tr ng-repeat = "subject in student.subjects">
                            <td>{{ subject.name }}</td>
                            <td>{{ subject.marks }}</td>
                         </tr>

                      </table>
                   </td>

                </tr>
             </table>

          </div>
    </div>

    </body>
    </html>

1

// root-app
const rootApp = angular.module('root-app', ['app1', 'app2E']);

// app1
const app11aa = angular.module('app1', []);
app11aa.controller('main', function($scope) {
  $scope.msg = 'App 1';
});

// app2
const app2 = angular.module('app2E', []);
app2.controller('mainB', function($scope) {
  $scope.msg = 'App 2';
});

// bootstrap
angular.bootstrap(document.querySelector('#app1a'), ['app1']);
angular.bootstrap(document.querySelector('#app2b'), ['app2E']);
<!-- angularjs@1.7.0 -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular.min.js"></script>

<!-- root-app -->
<div ng-app="root-app">

  <!-- app1 -->
  <div id="app1a">
    <div ng-controller="main">
      {{msg}}
    </div>
  </div>

  <!-- app2 -->
  <div id="app2b">
    <div ng-controller="mainB">
      {{msg}}
    </div>
  </div>

</div>


0

मैंने आपके jsfiddle को संशोधित किया है, बाकी मॉड्यूल के लिए रूटमॉडल के रूप में शीर्ष अधिकांश मॉड्यूल बना सकता है। नीचे संशोधन अपने jsfiddle पर अद्यतन किया गया।

  1. RootModule में दूसरा मॉड्यूल इंजेक्ट किया जा सकता है।
  2. एचटीएमएल में रूट एनजी ऐप के अंदर दूसरा परिभाषित एनजी-ऐप रखा गया है।

Updated JsFiddle: http://jsfiddle.net/ep2sQ/1011/


किसी भी विचार क्यों यह केवल पहले का मूल्यांकन कर रहा है ng-app? jsfiddle.net/vwcbtzdg
Si8

पहले केवल स्वचालित रूप से प्रारंभिक, अन्य को मैन्युअल रूप से आरंभ करना है
मनो

0

angular.bootstrap(element, [modules], [config])AngularJS एप्लिकेशन को मैन्युअल रूप से शुरू करने के लिए उपयोग करें (अधिक जानकारी के लिए, बूटस्ट्रैप गाइड देखें )।

निम्नलिखित उदाहरण देखें:

// root-app
const rootApp = angular.module('root-app', ['app1', 'app2']);

// app1
const app1 = angular.module('app1', []);
app1.controller('main', function($scope) {
  $scope.msg = 'App 1';
});

// app2
const app2 = angular.module('app2', []);
app2.controller('main', function($scope) {
  $scope.msg = 'App 2';
});

// bootstrap
angular.bootstrap(document.querySelector('#app1'), ['app1']);
angular.bootstrap(document.querySelector('#app2'), ['app2']);
<!-- angularjs@1.7.0 -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.0/angular.min.js"></script>

<!-- root-app -->
<div ng-app="root-app">

  <!-- app1 -->
  <div id="app1">
    <div ng-controller="main">
      {{msg}}
    </div>
  </div>

  <!-- app2 -->
  <div id="app2">
    <div ng-controller="main">
      {{msg}}
    </div>
  </div>

</div>


-5
<html>
<head>
    <script src="angular.min.js"></script>
</head>
<body>
<div ng-app="shoppingCartParentModule" >
     <div ng-controller="ShoppingCartController">
        <h1>Your order</h1>
        <div ng-repeat="item in items">
            <span>{{item.product_name}}</span>
            <span>{{item.price | currency}}</span>
            <button ng-click="remove($index);">Remove</button>
        </div>
    </div>

    <div ng-controller="NamesController">
        <h1>List of Names</h1>
        <div ng-repeat="name in names">
            <p>{{name.username}}</p>
        </div>
    </div>
</div>
</body>
<script>
var shoppingCartModule = angular.module("shoppingCart", [])
            shoppingCartModule.controller("ShoppingCartController",
                function($scope) {
                    $scope.items = [
                        {product_name: "Product 1", price: 50},
                        {product_name: "Product 2", price: 20},
                        {product_name: "Product 3", price: 180}
                    ];
                    $scope.remove = function(index) {
                        $scope.items.splice(index, 1);
                    }
                }
            );
            var namesModule = angular.module("namesList", [])
            namesModule.controller("NamesController",
                function($scope) {
                    $scope.names = [
                        {username: "Nitin"},
                        {username: "Mukesh"}
                    ];
                }
            );
   angular.module("shoppingCartParentModule",["shoppingCart","namesList"])
</script>
</html>

1
अपने उत्तर में जो आपने पोस्ट किया है उसका विवरण जोड़ें
अभिनव सिंह मौर्य

1
क्या हो रहा है की व्याख्या करते हुए टिप्पणी की आवश्यकता है! अच्छा प्रयास!
एरिक ब्राउन -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.