অ্যাংুলারজেএসের বিরুদ্ধে লড়াই করা দু'বার এক্সিকিউটিভ কন্ট্রোলার


532

আমি বুঝতে পারি অ্যাংুলারজেএস দুটি কোডের মধ্য দিয়ে দু'বার চালিত হয়, কখনও কখনও এমনকি আরও বেশি $watchইভেন্টের মতো , ক্রমাগত মডেল রাজ্যগুলি পরীক্ষা করে ইত্যাদি

তবে আমার কোড:

function MyController($scope, User, local) {

var $scope.User = local.get(); // Get locally save user data

User.get({ id: $scope.User._id.$oid }, function(user) {
  $scope.User = new User(user);
  local.save($scope.User);
});

//...

আমার ডিবিতে 2 টি রেকর্ড সন্নিবেশ করিয়ে দুবার মৃত্যুদন্ড কার্যকর করা হয়। আমি স্পষ্টভাবে এখনও শিখছি যেহেতু আমি যুগে যুগে এটির বিরুদ্ধে মাথা ঘুরছি!


104
যদি আপনার কন্ট্রোলারটি দু'বার চলছে তবে পরীক্ষা করুন যে আপনি দুবার আপনার কৌণিক অ্যাপ্লিকেশনটি আরম্ভ করছেন না ( ng-appম্যানুয়াল বুটস্ট্র্যাপের সাথে এবং এটি স্বয়ংক্রিয়ভাবে আরম্ভ করার মাধ্যমে )। এছাড়াও আপনি আপনার নিয়ামককে একাধিক উপাদানগুলির সাথে যুক্ত করেছেন কিনা তাও পরীক্ষা করুন (এনজি-কন্ট্রোলার সহ)।
স্টিভি

7
আপনি "এবং ম্যানুয়াল বুটস্ট্র্যাপ সহ" বলতে কী বোঝাতে চান?
খেলা


2
লগিংয়ের সাথে কোনও সমস্যা সমাধানের সময় এবং কনসোল লগতে দু'বার আগুন দেখে আমার উত্তরাধিকার সূত্রে প্রাপ্ত একটি অ্যাপ্লিকেশনটিতে সদৃশ নিয়ন্ত্রক আচরণ লক্ষ্য করেছি। প্রথম লগ ফায়ারের একটি মান ছিল তবে দ্বিতীয়টি অপরিবর্তিত ছিল। কন্ট্রোলারের জন্য এইচটিএমএল এনজি-নিয়ামক নির্দেশিকা সরিয়ে দেওয়ার পরে, দ্বিতীয় কনসোল লগ ফায়ার যা অপরিবর্তিত ছিল তা চলে গেল।
ড্যানিয়েল নলবাচ

2
যদি কৌণিক.জেএস দু'বার যুক্ত হচ্ছে, তবে এটিও ঘটতে পারে
মোহিত

উত্তর:


1050

অ্যাপ্লিকেশন রাউটার এতে নেভিগেশন নির্দিষ্ট করেছে MyController পছন্দ :

$routeProvider.when('/',
                   { templateUrl: 'pages/home.html',
                     controller: MyController });

তবে আমারও এটি ছিল home.html :

<div data-ng-controller="MyController">

এটি নিয়ামককে দু'বার হজম করে। data-ng-controllerএইচটিএমএল থেকে বৈশিষ্ট্যটি সরানো সমস্যার সমাধান করেছে। বিকল্পভাবে, controller:সম্পত্তিটি রাউটিংয়ের নির্দেশিকা থেকে সরানো যেতে পারে।

ট্যাবড নেভিগেশন ব্যবহার করার সময়ও এই সমস্যাটি উপস্থিত হয়। উদাহরণস্বরূপ, এতে app.jsথাকতে পারে:

  .state('tab.reports', {
    url: '/reports',
    views: {
      'tab-reports': {
        templateUrl: 'templates/tab-reports.html',
        controller: 'ReportsCtrl'
      }
    }
  })

সম্পর্কিত প্রতিবেদনের ট্যাব এইচটিএমএল এর অনুরূপ হতে পারে:

<ion-view view-title="Reports">
  <ion-content ng-controller="ReportsCtrl">

এর ফলেও দু'বার কন্ট্রোলার চালানো হবে।


4
এটি ছেড়ে যাওয়ার সেরা জায়গা বলে মনে হচ্ছে, আমার কোডটি সংযুক্ত করার কয়েক ঘন্টা পরে, আমাকে কীভাবে জিজ্ঞাসা করবেন না, তবে যখন আমি পরিবর্তন <div ng-view>...করি <div class="ng-view">..., তখন এই সমস্যাটি আমার জন্য বন্ধ হয়ে গেল। আমি এর আগে এই আচরণটি আসিনি, তবে অন্য কারও সাথে এটিও থাকতে পারে।
Phix

5
এনজিএন্ট্রোলার, ডকস.আঙ্গুলারজ.স.আর
চার্লস

1
রুটে কোনও নিয়ামক ঘোষণা করার কোনও উপায় আছে এবং তার পরে নিজেই এইচটিএমএল পৃষ্ঠায় অন্য কোনও নিয়ামক? উভয় কাজ এবং কোনও দ্বন্দ্বকে কীভাবে নিশ্চিত করবেন? নাকি এটি অপ্রয়োজনীয়?
Thinkerer

1
এটি সম্ভবত অপ্রয়োজনীয়, এর পরিবর্তে সম্ভবত কয়েকটি নির্দেশিকা ব্যবহার করবেন?
গ্রেগ

2
@ জোশ এইচটিএমএল এ রেখে দিলে নমনীয়তা হ্রাস পায়। আপনি আপনার টেম্পলেটটি সরাসরি একজন নিয়ামকের সাথে বেঁধে রাখছেন। আপনি রাউটিংয়ের সাথে সিনট্যাক্স হিসাবে সিটিআরএল ব্যবহার করতে পারেন।
গ্রেগ

127

কৌণিক জেএস ডক্স - এনজিগ কন্ট্রোলার
নোট করুন যে আপনি via রুট পরিষেবাদির মাধ্যমে কোনও রুট সংজ্ঞায় ঘোষণা করে ডিওএমের সাথে কন্ট্রোলারও সংযুক্ত করতে পারেন। একটি সাধারণ ভুল হ'ল টেমপ্লেটে নিজেই এনজি-কন্ট্রোলার ব্যবহার করে আবার নিয়ামককে ঘোষণা করা। এর ফলে নিয়ামকটি সংযুক্ত এবং দু'বার সম্পাদিত হবে।

আপনি যখন ng-viewনির্দেশের সাথে এনজিআরট ব্যবহার করেন , তখন নিয়ামক ডিফল্টরূপে (বা ইউআই- ভিউর ব্যবহার করে ইউআই-ভিউ) সেই ডোম উপাদানটির সাথে সংযুক্ত হয়ে যান। সুতরাং আপনাকে এটি আবার টেমপ্লেটে সংযুক্ত করার দরকার হবে না।


সদৃশ আনসার লেখক ইতিমধ্যে একই বলে জবাব দিয়েছেন। পৃষ্ঠার শেষ অবধি নিচে স্ক্রোল করুন।
ইয়াগো

4
আমি এটি বিভ্রান্ত হয়ে দেখেছি যে লেখক এটিকে পার্শ্ব নোট হিসাবে রেখেছেন যখন এটি অবশ্যই করার সঠিক উপায়। ডক্সের উদ্ধৃতিটি প্রশ্নের উত্তর পরিষ্কার করে দিয়েছে। এবং আমি নিশ্চিত যে অনেকে ডকটির লিঙ্কটি সহায়ক বলে মনে করবে।
shxfi

এটি আমার নিয়ামককে দুবার মৃত্যুদন্ড কার্যকর করার সমস্যার সমাধান করেছে। আমি যা করলাম তা হ'ল টেমপ্লেটের এনজি-কন্ট্রোলারটি সরিয়ে ফেলতে এবং এখন এটি কেবল একবার কার্যকর করা হবে।
torbenrudgaard

70

আমি কেবল এটি পেরিয়েছি, তবে বিষয়টি গ্রহণযোগ্য উত্তর থেকে আলাদা ছিল। আমি এটি আমার ভবিষ্যতের স্বের জন্য এখানে রেখেছি, এটি ঠিক করার জন্য আমি যে পদক্ষেপগুলি দিয়েছি তা অন্তর্ভুক্ত করার জন্য।

  1. অপ্রয়োজনীয় নিয়ামক ঘোষণাগুলি সরান
  2. রুটে ট্রেলিং স্ল্যাশ পরীক্ষা করুন
  3. অনুসন্ধানের জন্য ng-ifs
  4. কোনো অপ্রয়োজনীয় মোড়ানো জন্য চেক করুন ng-viewকল (আমি ঘটনাক্রমে একটি ইন ছেড়ে চলে গেছে ng-viewযে আমার প্রকৃত মোড়কে ছিল ng-view। এটা আমার কন্ট্রোলার তিন কল ফলে।)
  5. আপনি যদি কারাগারে turbolinksরয়েছেন তবে আপনার application.jsফাইলটি থেকে রত্নটি সরিয়ে নেওয়া উচিত । আমি এটি আবিষ্কার করতে সারা দিন নষ্ট করেছিলাম। উত্তর এখানে খুঁজে
  6. এনজি-অ্যাপ্লিকেশন এবং বুটস্ট্র্যাপের মাধ্যমে অ্যাপটি দু'বার শুরু করা হচ্ছে। অ্যাংুলারজেএসের বিরুদ্ধে লড়াই করা দু'বার এক্সিকিউটিভ কন্ট্রোলার
  7. নির্দেশনার 'লিংক'-ফাংশনে element সম্পূর্ণ উপাদানটিতে সংকলন ব্যবহার করার সময় যার নিজস্ব কন্ট্রোলারও সংজ্ঞায়িত থাকে এবং এনজি-ক্লিক ইত্যাদির মাধ্যমে টেমপ্লেটে এই নিয়ামকের কলব্যাকগুলি ব্যবহার করে এখানে উত্তর পাওয়া গেছে

৫. আপনি যদি কারাগারে রয়েছেন, turbolinksআপনার application.jsফাইলটি থেকে রত্ন সরিয়ে নেওয়া উচিত । এটি আমাকে পাগল করেছে, এটি আবিষ্কার করতে সারা দিন অপচয় করে। সত্যিকারের যন্ত্রনা. এখানে
ইগস্ট

N. এনজি-অ্যাপ এবং বুটস্ট্র্যাপের মাধ্যমে অ্যাপটি দু'বার শুরু করা। stackoverflow.com/questions/15535336/...
thadeuszlay

1
ধন্যবাদ আমার জন্য, যে জিনিসটি কাজ করেছিল সেটি হ'ল রুটের শেষে
প্রমোদ শর্মা

এক মিলিয়ন ধন্যবাদ, এই সম্পর্কে আমার মাথা ভাঙ্গা ছিল। number নম্বরে শেষ! (সর্বদা সর্বশেষ ...)।
রাব্বি শুকি গুড়

বাহ, বিশ্বাস করুন বা না করুন, আমি আপনার তালিকার সমস্ত কিছু পেরিয়েছি এবং এখনও আমি বিষয়টি নিয়ে রয়েছি।
জ্যাকব স্ট্যাম

14

যখন নিয়ামক দু'বার দীক্ষা নিতে পারেন কেবল তখনই আরও একটি কেস যুক্ত করতে চান (এটি কৌণিক.জেএস ১.৩.১ এর ক্ষেত্রে প্রকৃত):

<div ng-if="loading">Loading...</div>
<div ng-if="!loading">
    <div ng-view></div>
</div>

এই ক্ষেত্রে যখন এনজি-ভিউ শুরু হবে তখন $ রুট.কন্টেন্ট ইতিমধ্যে সেট হয়ে যাবে। যে ডাবল আরম্ভের কারণ।

এটি ঠিক করতে কেবল এনজি-ইফ-কে এনজি-শো / এনজি-লুকান এবং সমস্ত কিছু ভালভাবে কাজ করবে change


এটি আমাকে সহায়তা করেছে, আমি এনজি-ইফ-এর পরিবর্তে এনজি-শো / এনজি-লুক ব্যবহার করছিলাম, আমার কাছে দুটি এনজি-ভিউ ছিল, এটি কোনও সমস্যা নয় তবে এনজি-যদি অক্ষম থাকে তবে এনজি-শো / এনজি-লুকান না
দিমিত্রি কোপ্রিয়া 11

অসংখ্য ধন্যবাদ. এই পদ্ধতির ফলে আমার সমস্যার সমাধান হয়েছে। একই ui-viewবার দু'বার ফোন করছিল যা নিয়ামককে দুবার ডেকেছিল।
কার্লিগ্রেগি

7

রেফারেন্সের জন্য যুক্ত করতে চাই:

ডাবল কন্ট্রোলার কোড এক্সিকিউশনেশন এছাড়াও নিয়ামককে পৃষ্ঠাটিতে পরিচালিত নির্দেশিকায় রেফারেন্সের কারণে ঘটতে পারে।

যেমন

return {

            restrict: 'A',
            controller: 'myController',
            link: function ($scope) { ....

যখন আপনার এইচটিএমএলে এনজি-কন্ট্রোলার = "মাইকন্ট্রোলার" থাকে


এই জন্য সমাধান কি?
সাগর ভোসলে

1
কেবল একটি বা অন্যটি ব্যবহার করুন।
gb2d

7

কৌণিক-ইউআই-রাউটারটি কৌণিক 1.3+ এর সাথে ব্যবহার করার সময় , রুট ট্রানজিশনে দু'বার রেন্ডারিংয়ের বিষয়ে একটি সমস্যা হয়েছিল । এর ফলে দু'বার কন্ট্রোলারদের মৃত্যুদন্ড কার্যকর করা হয়েছিল। প্রস্তাবিত সমাধানগুলির কোনওোটাই আমার পক্ষে কাজ করেনি।

তবে, angular-ui-router0.2.11 থেকে 0.2.13 থেকে আপডেট করা আমার জন্য সমস্যার সমাধান করেছে।


6

আমি আমার অ্যাপ্লিকেশন এবং এর সমস্ত নির্ভরতা ছড়িয়ে দিয়েছি এই ইস্যুটির উপরে বিট দেওয়ার জন্য (বিশদটি এখানে: AngularJS অ্যাপ্লিকেশনটি দু'বার শুরু করেছে (সাধারণ সমাধান চেষ্টা করে ...) )

এবং শেষ পর্যন্ত, এটি সমস্ত বাটারং ক্রোম প্লাগইনের দোষ ছিল।

এই উত্তরে রেজোলিউশন :

আমি কাউকে তালিকার প্রথম বিষয়টি দৃ strongly়ভাবে সুপারিশ করবো কোড পরিবর্তন করার আগে পোস্ট অনুযায়ী এটি অক্ষম করা।


এটা আমার সমস্যা ছিল। প্লাগইনটি আপনার অ্যাংুলার অ্যাপ্লিকেশনটির একটি দ্বৈত উদাহরণ চালায় যাতে এটি স্কোপ তথ্য সরবরাহ করতে পারে (কেন এটি কেবল প্রাথমিক উদাহরণটি ব্যবহার করতে পারে না তা জানেন না)।
আরজিডিজিটাল

আমি আনন্দিত যে এটি সাহায্য করেছিল, এটি বের করতে আমার অনেক বেশি সময় লেগেছে।
লুইস

5

আপনি যদি জানেন যে আপনার কন্ট্রোলার অনিচ্ছাকৃতভাবে একাধিকবার সম্পাদন করছে, আপত্তিজনক নিয়ন্ত্রণকারীটির নামের জন্য আপনার ফাইলগুলির মাধ্যমে অনুসন্ধানের চেষ্টা করুন, উদাহরণ: অনুসন্ধান: সমস্ত ফাইলের মাধ্যমে মাইকন্ট্রোলার। সম্ভবত এটি অন্য কোনও এইচটিএমএল / জেএস ফাইলগুলিতে অনুলিপি-পেস্ট হয়ে গেছে এবং যখন আপনি এই পার্টিয়ালগুলি / নিয়ন্ত্রণকারীগুলি বিকাশ করতে বা ব্যবহার করতে গিয়েছিলেন তখন আপনি এটি পরিবর্তন করতে ভুলে গিয়েছিলেন। সূত্র: আমি এই ভুল করেছি


5

আমার একই সমস্যা ছিল, একটি সাধারণ অ্যাপ্লিকেশনে (কোনও রাউটিং এবং একটি সহজ এনজি-কন্ট্রোলার রেফারেন্স সহ) এবং আমার নিয়ামকের কনস্ট্রাক্টর দু'বার চালিত হয়েছিল। পরিশেষে, আমি জানতে পেরেছিলাম যে আমার সমস্যাটি আমার রেজার ভিউতে আমার AngularJS অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে বুটস্ট্র্যাপ করার জন্য নিম্নলিখিত ঘোষণা ছিল

<html ng-app="mTest1">

আমি নিজেও এটি কৌণিক. বুটস্ট্র্যাপ ব্যবহার করে বুটস্ট্র্যাপ করেছি

angular.bootstrap(document, [this.app.name]);

সুতরাং তাদের মধ্যে একটি অপসারণ, এটি আমার পক্ষে কাজ করে।


4

কিছু ক্ষেত্রে আপনার নির্দেশিকা দু'বার সঞ্চালিত হয় যখন আপনি কেবল ঘনিষ্ঠভাবে সংশোধন করেন না আপনি এইভাবে নির্দেশিকা:

<my-directive>Some content<my-directive>

এটি আপনার নির্দেশিকাটি দু'বার চালাবে। এছাড়াও আপনার নির্দেশিকা দু'বার সঞ্চালিত হওয়ার ক্ষেত্রে আরও একটি ক্ষেত্রে রয়েছে:

আপনি আপনার index.html টুইটে আপনার নির্দেশকে অন্তর্ভুক্ত করছেন না তা নিশ্চিত করুন !


এছাড়াও আপনি যদি ইউআই-রাউটার ব্যবহার করে থাকেন তবে কোনও শ্রেণীর অভ্যন্তরে ইউআই-ভিউর জন্য নির্দেশের নাম উল্লেখ করে দ্বিগুণ কার্যকর হওয়ার ফলস্বরূপ বলে মনে হচ্ছে। এটিকে ই বা <ui_view> </ui-view> এ পরিবর্তন করা ডাবল এক্সিকিউশন ইস্যুটি ঠিক করে।
স্টিভিজএসডি

2

AngularJS 1.4 আরসি বিল্ডটি নিয়ে এই সমস্যার জন্য আমার মাথা আঁচড়ে গেছে, তখন বুঝতে পারলাম উপরের উত্তরগুলির কোনওটিই প্রযোজ্য নয়, কারণ এটি কৌনিক 1.4 এবং কৌণিক 2 এর জন্য নতুন রাউটার লাইব্রেরি থেকে উদ্ভূত হয়েছিল লেখার সময় । অতএব, আমি যে কেউ নতুন কৌণিক রুট লাইব্রেরিটি ব্যবহার করতে পারি তার জন্য আমি এখানে একটি নোট ফেলে দিচ্ছি।

মূলত যদি কোনও এইচটিএমএল পৃষ্ঠায় ng-viewportআপনার অ্যাপের অংশগুলি লোড করার জন্য কোনও নির্দেশ থাকে, তবে এতে নির্দিষ্ট একটি হাইপারলিংকের উপর ক্লিক করে ng-linkসংশ্লিষ্ট উপাদানটির টার্গেট কন্ট্রোলারটি দুটিবার লোড হতে পারে। সূক্ষ্ম পার্থক্যটি হ'ল, যদি ব্রাউজারটি ইতিমধ্যে লক্ষ্য নিয়ামকটি লোড করে, একই হাইপারলিংকটিকে পুনরায় ক্লিক করে কেবল একবার নিয়ন্ত্রককে ডেকে আনে।

এখনও একটি কার্যক্ষম কাজের সন্ধান পাইনি , যদিও আমি বিশ্বাস করি যে এই আচরণটি শানক্সু দ্বারা উত্থাপিত পর্যবেক্ষণের সাথে সামঞ্জস্যপূর্ণ এবং আশা করি ভবিষ্যতে নতুন রুট লাইব্রেরি এবং অ্যাংুলার জেএস ১.৪ প্রকাশের পাশাপাশি এই সমস্যাটি সমাধান হবে।


2

আমার ক্ষেত্রে, আমি একই নিয়ামকটি ব্যবহার করে দুটি মতামত পেয়েছি।

$stateProvider.state('app', {
  url: '',
  views: {
    "viewOne@app": {
      controller: 'CtrlOne as CtrlOne',
      templateUrl: 'main/one.tpl.html'
    },
    "viewTwo@app": {
      controller: 'CtrlOne as CtrlOne',
      templateUrl: 'main/two.tpl.html'
    }
  }
});

2

আমি যে সমস্যার মুখোমুখি হচ্ছি তা স্পর্শকাতর হতে পারে তবে গুগলিং যেহেতু আমাকে এই প্রশ্নে নিয়ে এসেছে তাই এটি উপযুক্ত হতে পারে। ইউআই রাউটার ব্যবহার করার সময় সমস্যাটি আমার কৃপণতার সাথে দেখা দেয় তবে আমি কেবল তখনই ব্রাউজারের রিফ্রেশ বোতামটি দিয়ে পৃষ্ঠাটি রিফ্রেশ করার চেষ্টা করি। অ্যাপ্লিকেশনটি ইউআই রাউটারকে পিতামাতার বিমূর্ত রাষ্ট্রের সাথে ব্যবহার করে এবং তারপরে সন্তানের পিতামাতাকে বন্ধ করে দেওয়া হয়। অ্যাপ run()ফাংশনে, একটি $state.go('...child-state...')কমান্ড রয়েছে। প্যারেন্ট স্টেট ব্যবহার করে aresolve এবং প্রথমে আমি ভেবেছিলাম সম্ভবত কোনও শিশু নিয়ামক দু'বার সম্পাদন করছেন।

ইউআরএল হ্যাশ যুক্ত হওয়ার আগে সবকিছু ঠিক আছে।
www.someoldwebaddress.org

তারপরে একবার ইউআরএলটি ইউআই রাউটার দ্বারা সংশোধন করা হয়েছে,
www.someoldwebaddress.org#/childstate

... এবং তারপর যখন আমি ব্রাউজার রিফ্রেশ বাটন সঙ্গে পৃষ্ঠাটি রিফ্রেশ , $stateChangeStartদাবানল দুইবার, এবং প্রতিটি সময় পয়েন্ট childstate

resolveপিতা বা মাতা রাষ্ট্র কি দুইবার অগ্নিসংযোগ করা হয়।

সম্ভবত এটি একটি ক্লডজ; কোড যেখানে ক্ষেত্রে: নির্বিশেষে এই আমার জন্য সমস্যা নির্মূল করার প্রদর্শিত হচ্ছে না $stateProviderপ্রথম প্রার্থনা করা হয়, প্রথম কিনা তা আপনার পরীক্ষা window.location.hash একটি খালি স্ট্রিং। যদি তা হয় তবে সব ঠিক আছে; যদি তা না হয়, তবে উইন্ডো.লোকেশন.হ্যাশটি একটি খালি স্ট্রিংয়ে সেট করুন । তারপরে মনে হয় $stateএকমাত্র দু'বারের পরিবর্তে কোথাও যাওয়ার চেষ্টা করেছে।

এছাড়াও, আপনি যদি অ্যাপ্লিকেশনটির ডিফল্টর উপর নির্ভর করতে না চান runএবং state.go(...), আপনি পৃষ্ঠার রিফ্রেশের ঠিক আগে যে শিশু অবস্থানে ছিলেন তা নির্ধারণ করতে আপনি হ্যাশ মানটি ক্যাপচার করতে এবং হ্যাশ মানটি ব্যবহার করার চেষ্টা করতে পারেন এবং আপনার অঞ্চলে একটি শর্ত যুক্ত করতে পারেন কোড আপনি সেট যেখানে state.go(...)


1

আমার ক্ষেত্রে এটি ইউআরএল প্যাটার্নটি ব্যবহার করার কারণে হয়েছিল

আমার ইউআরএলটি / ui / প্রকল্প /: পরামিতি 1 /: পরামিতি 2 এর মতো ছিল।

রাষ্ট্র পরিবর্তনের সব ক্ষেত্রে আমার প্যারামিটার 2 লাগবে না। যে ক্ষেত্রে আমার দ্বিতীয় প্যারামিটারের দরকার নেই সে ক্ষেত্রে আমার ইউআরএলটি / ui / প্রকল্প /: পরামিতি 1 / এর মতো হবে। এবং তাই যখনই আমার স্থিতি পরিবর্তন হয়েছিল আমি আমার নিয়ামককে দু'বার রিফ্রেশ করব।

সমাধানটি ছিল প্যারামিটার 2 খালি স্ট্রিং হিসাবে সেট করা এবং রাজ্য পরিবর্তন করা।


1

আমি একটি ভিন্ন কারণে এই দ্বিগুণ সূচনা ঘটেছে। আমার অ্যাপ্লিকেশনটিতে কয়েকটি রুট-ট্রানজিশনের জন্য আমি পৃষ্ঠার শীর্ষের নিকটে স্ক্রোলিংকে বাধ্য করতে চেয়েছিলাম (উদাহরণস্বরূপ পৃষ্ঠায়িত অনুসন্ধান ফলাফলগুলিতে ... পরবর্তী ক্লিক করা আপনাকে পৃষ্ঠা 2 এর শীর্ষে নিয়ে যেতে হবে)।

আমি এটিতে শ্রোতা যুক্ত করে $rootScope $on $viewContentLoadedযা করেছি (নির্দিষ্ট শর্তের ভিত্তিতে) কার্যকর করা হয়েছিল

$location.hash('top');

অসাবধানতার ফলে এটি আমার রুটগুলি পুনরায় মূল্যায়ন এবং নিয়ন্ত্রণকারীদের পুনরায় পুনর্নির্মাণের কারণ হয়ে উঠছিল



1

আমার ক্ষেত্রে নিয়ামকটির নাম আলাদা আলাদা করে দেওয়া সমস্যার সমাধান করে।

" কৌণিক-ইউআই-ট্রি " মডিউলটির সাথে নিয়ামকের নামের বিরোধ ছিল : আমি আমার কন্ট্রোলারের নাম "ক্যাটালোজারট্রি কন্ট্রোলার" থেকে "ট্রিকন্ট্রোলার" করে রেখেছিলাম এবং তারপরে এই নিয়ামকটি সেই পৃষ্ঠায় দু'বার শুরু করা শুরু করে যেখানে " ইউআই-ট্রি " নির্দেশিকা ব্যবহৃত হয়েছিল কারণ এই নির্দেশিকা " TreeController " নামক নিয়ামক ব্যবহার করে ।


1

যারা কন্ট্রোলারস সিনট্যাক্স ব্যবহার করেন তাদের জন্য কেবল $ রুটপ্রোভাইডারটিতে কন্ট্রোলার লেবেলটি নীচে ঘোষণা করুন:

$routeprovider
        .when('/link', {
            templateUrl: 'templateUrl',
            controller: 'UploadsController as ctrl'
        })

অথবা

$routeprovider
        .when('/link', {
            templateUrl: 'templateUrl',
            controller: 'UploadsController'
            controllerAs: 'ctrl'
        })

$ রুটপ্রোভাইডার ঘোষণার পরে, ভিউ হিসাবে নিয়ামক সরবরাহ করবেন না। পরিবর্তে ভিউতে লেবেলটি ব্যবহার করুন।


0

আমার একই সমস্যা ছিল এবং সমস্ত উত্তরগুলি চেষ্টা করার পরে অবশেষে আমি দেখতে পেলাম যে আমার দৃষ্টিভঙ্গিতে একটি নির্দেশ ছিল যা একই নিয়ামকের সাথে আবদ্ধ ছিল।

APP.directive('MyDirective', function() {
  return {
    restrict: 'AE',
    scope: {},
    templateUrl: '../views/quiz.html',
    controller: 'ShowClassController'
}
});

নির্দেশটি সরানোর পরে নিয়ামককে দু'বার ফোন করা বন্ধ হয়ে যায়। এখন আমার প্রশ্ন হ'ল এই নির্দেশিকাটি কীভাবে এই সমস্যা ছাড়াই নিয়ামক স্কোপকে আবদ্ধ করতে পারেন?


0

আমি সবেমাত্র আমার সমাধান করেছি, যা আসলে বেশ হতাশাব্যঞ্জক ছিল। এটি একটি আয়নিক হাইব্রিড অ্যাপ্লিকেশন, আমি ইউআই-রাউটার v0.2.13 ব্যবহার করেছি। আমার ক্ষেত্রে একজন ইপুব রিডার রয়েছে (এপুব.জেএস ব্যবহার করে) যা আমি ক্রমাগত "আমার সাথে কোনও বইয়ের লাইব্রেরিতে নেভিগেট করে অন্য কোনও বই নির্বাচন করার পরে" কোনও দস্তাবেজ খুঁজে পাওয়া যায়নি "বলে প্রতিবেদন করছিল। আমি যখন পুনরায় লোড করি তখন ব্রাউজারের বইটি পুরোপুরি রেন্ডার করা হত তবে আমি যখন অন্য কোনও বইটি নির্বাচন করি তখন আবার একই সমস্যা হয়ে যায়।

আমার সমাধান খুব সহজ ছিল। আমি সবে reload:trueথেকে $state.go("app.reader", { fileName: fn, reload: true });আমার থেকে সরিয়েছিLibraryController


0

আমার একই সমস্যা রয়েছে angular-route@1.6.7এবং এটি কারণ রেইগেক্স রুটের শেষে অতিরিক্ত স্ল্যাশ :

.when('/goods/publish/:classId/', option)

প্রতি

.when('/goods/publish/:classId', option)

এবং এটি সঠিকভাবে কাজ করে।


0

এখানেও আমার মামলা যুক্ত করুন:

আমি ব্যবহার করছিলেন কৌণিক-ui এ-রাউটার সঙ্গে$state.go('new_state', {foo: "foo@bar"})

একবার আমি যোগ encodeURIComponent পরামিতির, সমস্যা সর্বস্বান্ত হয়েছিল: $state.go('new_state', {foo: encodeURIComponent("foo@bar")})

কি হলো? প্যারামিটার মানের "@" অক্ষরটি ইউআরএলগুলিতে অনুমোদিত নয়। ফলস্বরূপ, কৌণিক-ইউআই-রাউটার দুটিবার আমার নিয়ামক তৈরি করেছে: প্রথম সৃষ্টির সময় এটি মূল "foo @ বার" কেটে গেছে, দ্বিতীয় সৃষ্টির সময় এটি এনকোডড সংস্করণ "foo% 40bar" পাস করবে। উপরে বর্ণিত প্যারামিটারটি আমি স্পষ্টভাবে এনকোড করে নিলে সমস্যাটি চলে গেল।


-1

আমি বুঝতে পেরেছি যে আমার এইচটিএমএল থেকে দু'বার কল করা হচ্ছে কারণ আমি আমার এইচটিএমএল থেকে দুটি বার কল করছি।

`<form class="form-horizontal" name="x" ng-submit="findX() novalidate >
 <input type="text"....>
 <input type="text"....>
 <input type="text"....>
 <button type="submit" class="btn btn-sm btn-primary" ng-click="findX()"
</form>`

হাইলাইট করা বিভাগটি ফাইন্ডএক্স () কে দুবার কল করার জন্য সৃষ্টি করছিল। আশা করি এটি কাউকে সাহায্য করবে।

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