এক পৃষ্ঠায় দুটি কৌণিক অ্যাপস / মডিউল কীভাবে সংজ্ঞায়িত করবেন?


118

আমি একটি পৃষ্ঠায় দুটি কৌণিক অ্যাপস / মডিউল যুক্ত করার চেষ্টা করছি। নীচের ফিডলগুলিতে আপনি দেখতে পাচ্ছেন যে এইচটিএমএল কোডে উল্লেখ করা কেবলমাত্র প্রথম মডিউলটি সঠিকভাবে কাজ করবে, অন্যদিকে কৌণিক দ্বারা স্বীকৃত নয়।

এই ঝাঁকুনিতে আমরা কেবল doSearch2পদ্ধতিটি কার্যকর করতে পারি , তবে এই ফিডলে কেবল doSearchপদ্ধতিটি সঠিকভাবে কাজ করে।

আমি কীভাবে সঠিকভাবে একটি পৃষ্ঠায় দুটি কৌণিক মডিউল রাখার উপায়টি খুঁজছি।

উত্তর:


123

এইচটিএমএল ডকুমেন্টে কেবলমাত্র একটি অ্যাঙ্গুলারজেএস অ্যাপ্লিকেশনটি স্বয়ংক্রিয়-বুটস্ট্র্যাপড হতে পারে। নথিতে পাওয়া প্রথম এনজিএপ অ্যাপ্লিকেশন হিসাবে অটো-বুটস্ট্র্যাপে মূল উপাদানটি সংজ্ঞায়িত করতে ব্যবহৃত হবে। এইচটিএমএল ডকুমেন্টে একাধিক অ্যাপ্লিকেশন চালানোর জন্য আপনাকে এগুলি পরিবর্তে অ্যাঙ্গুলার.বুটস্ট্র্যাপ ব্যবহার করে ম্যানুয়ালি বুটস্ট্র্যাপ করতে হবে। AngularJS অ্যাপ্লিকেশনগুলি একে অপরের মধ্যে বাসা বাঁধতে পারে না। - http://docs.angularjs.org/api/ng.directive:ngApp

আরো দেখুন


@ মার্করজকোক তাই এইচটিএমএল ডকুমেন্টের জন্য কেবল একটি মডিউল থাকা ভাল অভ্যাস? মূল অ্যাংুলারজেএস পৃষ্ঠার "ওয়্যার আপ আ ব্যাকএন্ড" উদাহরণটি সেট করে ng-app="project"এবং বলে যে "এটি আপনাকে পৃষ্ঠার বিভিন্ন অংশে মডিউল দেয় যা" দেয় কিন্তু এনজিএপি ডকটি বলে যে "এইচটিএমএল ডকুমেন্টে কেবল একটি নির্দেশিকা ব্যবহার করা যেতে পারে"।
theblang

9
@ ম্যাটব্ল্যাং, মডিউলগুলি কৌণিক অ্যাপ্লিকেশনগুলির সাথে সম্পর্কিত এবং সত্যই এইচটিএমএল নথি নয়। সাধারণত আপনার কেবল প্রতিটি পৃষ্ঠা / নথিতে একটি অ্যাপের প্রয়োজন, তবে আপনি যদি একই পৃষ্ঠা / নথিতে একাধিক কৌণিক অ্যাপ্লিকেশনগুলি (যার মধ্যে প্রতিটি এক বা একাধিক মডিউল ব্যবহার করতে পারেন) চালাতে চান তবে আপনাকে সেগুলির প্রত্যেকটিকে ম্যানুয়ালি বুটস্ট্র্যাপ করতে হবে - - ব্যবহার করবেন না ng-app(কারণ এটি কাজ করবে না)। ng-appশুধুমাত্র এইচটিএমএল ডকুমেন্টে একবার ব্যবহার করা যেতে পারে। পৃষ্ঠায় যদি আপনার কেবল একটি অ্যাপ থাকে তবে এটি সত্যিই একটি শর্ট কাট।
মার্ক রাজকোক

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

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

1
এনজি-অ্যাপ্লিকেশন নির্দেশনার প্রথম দুটি অনুচ্ছেদে এগুলি
সিমো

38

আমি একটি বিকল্প নির্দেশিকা তৈরি করেছি যার ngAppসীমাবদ্ধতা নেই। এটি বলা হয় 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/

এটি সীমাবদ্ধতা ছাড়াই মূলত AngularJS দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত একই কোড।


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

@ ACIDSTEALTH এই বিষয়টি যে AngularJS জানিয়েছে যে উপাদানটি ইতিমধ্যে বুটস্ট্র্যাপ করেছে তার অর্থ হল যে বলার কিছু উপায় থাকতে হবে - যদিও সেই কোডটি AngularJS এর ​​অভ্যন্তরীণ হতে পারে। আপনি যদি শর্তটি দেখতে অ্যাংুলারজেএস এবং এর ত্রুটির ব্রেকআপপয়েন্টের আনমিনাইড সংস্করণটি উল্লেখ করতে পারেন। আপনার স্ট্যাকওভারফ্লো প্রশ্ন লিঙ্কটি থেকে আমি কী তৈরি করতে পারি তা দেখে মনে হচ্ছে আপনি রানটাইম সময়ে গতিশীলভাবে একটি মডিউল "ইনজেক্ট" করতে চান। যদি তাই হয় তবে আপনি এই নিবন্ধটি একবার দেখে নিতে চাইতে পারেন: weblogs.asp.net/dwahlin/…
লুইস পেরেজ

আরে @ লুইসপ্রেজ, আমি আপনার ওয়েবসাইটটি দেখেছি। আমি আমার মেশিনে ক্লান্ত হয়ে পড়েছি। কৌণিক জেএস "এনজি-মডিউল" / "এনজি-মডিউল" সনাক্ত করছে না। আমার ফাইলে অন্তর্ভুক্ত কোন রেফারেন্স দরকার?
সুজয় কোডমাল

হ্যাঁ @ সুজয়কোডমালা, এনজিমডুলটি অ্যাঙ্গুলারজেএস-এ তৈরি করা হয়নি এটি আমার তৈরি একটি নির্দেশিকা। আপনি এটি গিটহাব থেকে ডাউনলোড করতে পারেন। আপনি এটি এখানে খুঁজে পেতে পারেন: github.com/luisperezphd/ngModule
লুইস পেরেজ

হ্যালো @ লুইস পেরেজ! আমি আপনার ব্লগ পোস্টটি যাচাই করছিলাম এবং সেগুলি সত্যিই দুর্দান্ত। আপনার যদি সময় থাকে তবে দয়া করে কোনও সমস্যা সমাধানের জন্য আমার পোস্টটি এখানে পরীক্ষা করতে পারেন - stackoverflow.com/questions/46952478/… । ধন্যবাদ।
ব্যবহারকারী 8512043

19

আপনি কেন একাধিক [এনজি-অ্যাপ] ব্যবহার করতে চান? যেহেতু অ্যাঙ্গুলারটি মডিউলগুলি ব্যবহার করে পুনরায় শুরু করা হয়েছে, আপনি এমন অ্যাপ্লিকেশন ব্যবহার করতে পারেন যা একাধিক নির্ভরতা ব্যবহার করে।

javascript:

// setter syntax -> initializing other module for demonstration
angular.module('otherModule', []);

angular.module('app', ['otherModule'])
.controller('AppController', function () {
    // ...do something
});

// getter syntax
angular.module('otherModule')
.controller('OtherController', function () {
    // ...do something
});

এইচটিএমএল:

<div ng-app="app">
    <div ng-controller="AppController">...</div>
    <div ng-controller="OtherController">...</div>
</div>

সম্পাদনা

মনে রাখবেন যে আপনি যদি নিয়ামকের অভ্যন্তরে নিয়ামক ব্যবহার করতে চান তবে আপনাকে নিয়ন্ত্রণকারীর বাক্য গঠনটি ব্যবহার করতে হবে, যেমন:

<div ng-app="app">
    <div ng-controller="AppController as app">
        <div ng-controller="OtherController as other">...</div>
    </div>
</div>

Uncaught ত্রুটি: [$ প্রবেশক: modulerr] errors.angularjs.org/1.3.14/$injector/... ... criptMinification% 2Fbower_components% 2Fangular% 2Fangular.min.js% 3A17% 3A381)
Anandaraja_Srinivasan

আপনি কি 2 মডিউলগুলির ক্রমটি উল্টানোর চেষ্টা করেছেন? ('অ্যাপ্লিকেশন' এর আগে 'otherModule') কারণ, আমি এই সমাধানটি অনেকটা ব্যবহার করি এবং এটি পুরোপুরি কার্যকর হয় ...
Monkey Monk

1
ঠিক আছে ! আমি সরবরাহ করি এমন জাভাস্ক্রিপ্টের উদাহরণটিতে আমি একটি ত্রুটি দেখেছি। আমি এখন এটি স্থির! রেকর্ডের জন্য, আমি একই মডিউলের জন্য 2 স্থানে সেটার সিনট্যাক্স ব্যবহার করব ... যা স্পষ্টতই অনুমোদিত নয়! :-)
বানর সন্ন্যাসী

যেভাবে আমরা এটি করার ভঙ্গিতে
হ্যারি বোশ

9

আপনি একাধিক কৌণিক অ্যাপ্লিকেশন বুটস্ট্র্যাপ করতে পারেন তবে:

1) আপনাকে সেগুলি ম্যানুয়ালি বুটস্ট্র্যাপ করতে হবে

২) আপনার "ডকুমেন্ট" রুট হিসাবে ব্যবহার করা উচিত নয়, তবে যে নোডটিতে কৌণিক ইন্টারফেস রয়েছে সেগুলি:

var todoRootNode = jQuery('[ng-controller=TodoController]');
angular.bootstrap(todoRootNode, ['TodoApp']);

এটি নিরাপদ হবে।


3

দুটি মডিউলই ম্যানুয়াল বুটস্ট্র্যাপিংয়ের কাজ করবে। এটা দেখ

  <!-- IN HTML -->
  <div id="dvFirst">
    <div ng-controller="FirstController">
      <p>1: {{ desc }}</p>
    </div>
  </div>

  <div id="dvSecond">
    <div ng-controller="SecondController ">
      <p>2: {{ desc }}</p>
    </div>
  </div>



// IN SCRIPT       
var dvFirst = document.getElementById('dvFirst');
var dvSecond = document.getElementById('dvSecond');

angular.element(document).ready(function() {
   angular.bootstrap(dvFirst, ['firstApp']);
   angular.bootstrap(dvSecond, ['secondApp']);
});

এখানে প্লিংকারের লিঙ্কটি http://plnkr.co/edit/1SdZ4QpPfuHtdBjTKJIu?p= পূর্বরূপ দেখুন

দ্রষ্টব্য: এইচটিএমএলে, নেই ng-appidপরিবর্তে ব্যবহার করা হয়েছে।


0

আমি একক পৃষ্ঠায় অ্যাপ্লিকেশন নেস্ট সাব অ্যাপ্লিকেশন একাধিক মডিউল এবং রাউটার আউটলেট ব্যবহার করে একটি কৌণিক অ্যাপ্লিকেশন জন্য একটি POC তৈরি। আপনি উত্স কোডটি এখানে পেতে পারেন: https://github.com/AhmedBahet/ng-sub-apps

আশা করি এটি সাহায্য করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.