ত্রুটি: 10 $ ডাইজেস্ট () পুনরাবৃত্তি পৌঁছেছে। গর্ভপাত! গতিশীল ক্রমবর্ধমান সহ


134

আমার কাছে নিম্নলিখিত কোড রয়েছে যা ব্যবহারকারীর নাম এবং তার স্কোর পুনরাবৃত্তি করে এবং প্রদর্শন করে:

<div ng-controller="AngularCtrl" ng-app>
  <div ng-repeat="user in users | orderBy:predicate:reverse | limitTo:10">
    <div ng-init="user.score=user.id+1">
        {{user.name}} and {{user.score}}
    </div>
  </div>
</div>

এবং সংশ্লিষ্ট কৌণিক নিয়ামক।

function AngularCtrl($scope) {
    $scope.predicate = 'score';
    $scope.reverse = true;
    $scope.users = [{id: 1, name: 'John'}, {id: 2, name: 'Ken'}, {id: 3, name: 'smith'}, {id: 4, name: 'kevin'}, {id: 5, name: 'bob'}, {id: 6, name: 'Dev'}, {id: 7, name: 'Joe'}, {id: 8, name: 'kevin'}, {id: 9, name: 'John'}, {id: 10, name: 'Ken'}, {id: 11, name: 'John'}, {id: 1, name: 'John'}, {id: 2, name: 'Ken'}, {id: 3, name: 'smith'}, {id: 4, name: 'kevin'}, {id: 5, name: 'bob'}, {id: 6, name: 'Dev'}, {id: 7, name: 'Joe'}, {id: 8, name: 'kevin'}, {id: 9, name: 'John'}, {id: 10, name: 'Ken'}]
}

আমি যখন উপরের কোডটি চালাচ্ছি তখন আমি ত্রুটিটি পেয়েছি : 10 $ ডাইজেস্ট () পুনরাবৃত্তি পৌঁছেছে। গর্ভপাত! আমার কনসোলে ত্রুটি।

আমি একই জন্য jsfiddle তৈরি করেছেন

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

যদি $ স্কোপ.রিভার্সটি মিথ্যা (স্কোরের আরোহী ক্রম) হয় তবে এটি ত্রুটি করে না।

কেউ কি আমাকে বুঝতে এখানে সহায়তা করতে পারে? আপনার সাহায্যের অনেক প্রশংসা করি।


আপনি যদি বিবৃতিটি সরিয়ে থাকেন তবে এটি এখনও ত্রুটি করে?
ম্যাথিউ বার্গ

আপনার প্রতিক্রিয়া ম্যাথিউ জন্য ধন্যবাদ! আমি সমস্যাটি ভুল করে সনাক্ত করেছি। সমস্যাটি শর্টবাই এবং সীমাবদ্ধতা ফিল্টারগুলির সাথে রয়েছে বলে মনে হচ্ছে। আমি জেএসফিডেলের সাথে প্রশ্নটি আপডেট করেছি। আপনার সাহায্যের অনেক প্রশংসা করি।
নিবিড় বালক

এটি একটি কৌণিক জিনিস। আপনাকে আপনার ফাংশনগুলি স্মরণ করতে হবে এবং তারপরে রাষ্ট্রটির স্মরণ রাখতে হবে। আমার উত্তরটি স্ট্যাকওভারফ্লো
জুলিও মেরিনস

উত্তর:


116

দয়া করে এই jsFizz দেখুন । (কোডটি মূলত আপনি পোস্ট করেছেন একইরকম তবে আমি স্ক্রোল ইভেন্টগুলি আবদ্ধ করতে উইন্ডোর পরিবর্তে একটি উপাদান ব্যবহার করি)।

আমি যতদূর দেখতে পাচ্ছি, আপনার পোস্ট করা কোডটিতে কোনও সমস্যা নেই। আপনি সাধারণত কোনও ত্রুটি পরিবর্তনের একটি লুপ তৈরি করার সময় সাধারণত ত্রুটিটি উল্লেখ করেছিলেন। উদাহরণস্বরূপ, যখন আপনি কোনও নির্দিষ্ট সম্পত্তির পরিবর্তনগুলি লক্ষ্য করেন এবং তারপরে শ্রোতার উপর সেই সম্পত্তিটির মান পরিবর্তন করেন:

$scope.$watch('users', function(value) {
  $scope.users = [];
});

এটি একটি ত্রুটি বার্তায় ফলাফল করবে:

আনকচড ত্রুটি: 10 $ ডাইজেস্ট () পুনরাবৃত্তি পৌঁছেছে। গর্ভপাত!
শেষ 5 টি পুনরাবৃত্তিতে প্রহরী গুলি চালানো: ...

আপনার কোডটিতে এ জাতীয় পরিস্থিতি না রয়েছে তা নিশ্চিত করুন।

হালনাগাদ:

এটি আপনার সমস্যা:

<div ng-init="user.score=user.id+1"> 

রেন্ডার চলাকালীন আপনার অন্য কোনও জিনিস বা মডেলগুলি পরিবর্তন করা উচিত নয়, এটি একটি নতুন রেন্ডারকে বাধ্য করবে (এবং ফলস্বরূপ একটি লুপ , যার ফলে 'ত্রুটি: 10 $ ডাইজেস্ট () পুনরাবৃত্তি পৌঁছেছে। বাতিল করা হচ্ছে!' )।

আপনি যদি মডেলটি আপডেট করতে চান তবে এটি নিয়ন্ত্রণকারী বা কোনও নির্দেশিকাতে করুন, কখনই দর্শন নয়। angularjs ডকুমেন্টেশন ব্যবহার না করার বিশেষ পরামর্শ দেওয়া হচ্ছেng-init ঠিক পরিস্থিতিতে এই ধরনের এড়াতে:

টেমপ্লেটগুলিতে এনজিআইএনট নির্দেশিকা ব্যবহার করুন (কেবল খেলনা / উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলির জন্য, বাস্তব অ্যাপ্লিকেশনগুলির জন্য প্রস্তাবিত নয়)

এখানে একটি কার্যকরী উদাহরণ সহ একটি জেএসফিডাল


1
এফওয়াইআই, পরিবর্তে angular.element(w).bind()আপনি ব্যবহার করতে পারেন element.bind()
রাজকোক

অনেক ধন্যবাদ bmleite এবং মার্ক। আমি সমস্যাটি ভুল করে সনাক্ত করেছি। উপরে আমার মন্তব্য দেখুন। আমি জেএসফিডেলের সাথে প্রশ্নটি আপডেট করেছি। আপনার সাহায্যের অনেক প্রশংসা করি।
নিবিড় বয়

অনেক ধন্যবাদ @ বিমলাইট! শুধু আরও বোঝার চেষ্টা করছি। তবে কেন এটি যদি $ সুযোগ.revers = মিথ্যা (স্কোরের আরোহী ক্রম) ত্রুটি সৃষ্টি করে না?
নিবিড় বালক

আরোহণ এবং উত্থানের জন্য আপনার যথাক্রমে '+' এবং '-' উপসর্গটি ব্যবহার করা উচিত (অর্থাত্ '+ স্কোর' এবং '-স্কোর')। এই বিষয়ে আরো তথ্য এখানে
বিমলাইট

1
এই উত্তরটি আমার সমস্যার সমাধান করেছে। ব্যাখ্যাটি ভাল যে এতে সমস্যাটি বর্ণনা করা হয়েছে: আপনি যখন একই সাথে কোনও সম্পত্তি পরিবর্তন করার চেষ্টা করছেন তখন $ ডাইজেস্ট () পুনরাবৃত্তি ত্রুটির ফলাফল হয়। সুতরাং প্রতিটি সম্পত্তি পরিবর্তন ভিউ (ইউআই) এর একটি আপডেট ট্রিগার করে এবং কৌণিকটি শেষ পর্যন্ত 10 লুপে সর্বাধিক হয়। JsFizz উদাহরণটি নিয়ামককে সম্পত্তি পরিবর্তন করে। সম্পত্তিটিতে ভিউটিতে পরিবর্তন করা হলে এই ত্রুটি হয়।
এমবোকিল

9

আমার জন্য এই ত্রুটির কারণ ছিল ...

ng-if="{{myTrustSrc(chat.src)}}"

আমার টেম্পলেট

এটি আমার নিয়ামকটিতে myTrustSrc ফাংশনটি একটি অন্তহীন লুপে ডেকে আনে। যদি আমি এই লাইনটি থেকে এনজি-ইফটিকে সরিয়ে ফেলি, তবে সমস্যাটি সমাধান করা হবে।

<iframe ng-if="chat.src" id='chat' name='chat' class='chat' ng-src="{{myTrustSrc(chat.src)}}"></iframe>

এনজি-ইফ ব্যবহার না করা হলে ফাংশনটি কেবল কয়েকবার বলা হয়। আমি এখনও ভাবছি কেন এনজি-এসসিআর দিয়ে ফাংশনটি একাধিকবার বলা হয়?

এটি নিয়ামকের মধ্যে ফাংশন

$scope.myTrustSrc = function(src) {
    return $sce.trustAsResourceUrl(src);
}

আমি এখনও ভাবছি কেন এনজি-এসসিআর দিয়ে ফাংশনটি একাধিকবার বলা হয়? - কারণ কৌণিক এটির মতো 2 টি ফলাফল না পাওয়া পর্যন্ত কয়েক বার এইচটিএমএল তৈরি করার চেষ্টা করে। এটিই ত্রুটির অর্থ 10 $ ডাইজেস্ট () পুনরাবৃত্তি পৌঁছেছিল, তিনি 10 বার চেষ্টা করেছিলেন এবং কখনও 2
টির মতো

@ ব্রেসলেটর আপনি এই তথ্যের সাথে একটি লিঙ্ক সরবরাহ করতে পারেন? ধন্যবাদ।
উইলা

@Willa এখানে দেখুন docs.angularjs.org/api/ng/type/$rootScope.Scope CTRF + + এফ এই "পুন: প্রকাশ পুনরাবৃত্তির সীমা 10 একটি অসীম লুপ অচলাবস্থা প্রতিরোধ"
bresleveloper

ধন্যবাদ। যে সাহায্য করেছে।
উইলা

7

আমার জন্য এটি ছিল যে আমি একটি নির্দেশনার প্রতি 2-উপায় বাইন্ডিং ইনপুট '=' হিসাবে একটি ফাংশন ফলাফল দিয়ে যাচ্ছিলাম যা প্রতিবার একটি নতুন অবজেক্ট তৈরি করছিল।

সুতরাং আমি এরকম কিছু ছিলাম:

<my-dir>
   <div ng-repeat="entity in entities">
      <some-other-dir entity="myDirCtrl.convertToSomeOtherObject(entity)"></some-other-dir>
   </div>
</my-dir>

এবং আমার- dir এ নিয়ন্ত্রক পদ্ধতি ছিল

this.convertToSomeOtherObject(entity) {
   var obj = new Object();
   obj.id = entity.Id;
   obj.value = entity.Value;
   [..]
   return obj;
}

যা আমি যখন তৈরি

this.convertToSomeOtherObject(entity) {
   var converted = entity;
   converted.id = entity.Id;
   converted.value = entity.Value;
   [...]
   return converted;
}

সমস্যার সমাধান!

আশা করি এটি কাউকে সহায়তা করবে :)


5

আমার এমন আরও একটি উদাহরণ রয়েছে যার কারণে এটি ঘটেছে। আশা করি এটি ভবিষ্যতের রেফারেন্সের জন্য সহায়তা করে। আমি AngularJS 1.4.1 ব্যবহার করছি।

কাস্টম নির্দেশে একাধিক কল সহ আমার এই মার্কআপটি ছিল:

<div ng-controller="SomeController">
    <myDirective data="myData.Where('IsOpen',true)"></myDirective>
    <myDirective data="myData.Where('IsOpen',false)"></myDirective>
</div>

myDataএকটি অ্যারে এবং Where()এটি একটি এক্সটেনশন পদ্ধতি যা আইওপেন সম্পত্তি দ্বিতীয় প্যারামিটারের বুল মানটির সাথে মেলে যেখানে আসল থেকে কোনও আইটেম যুক্ত নতুন অ্যারে ফেরত অ্যারের উপরে পুনরাবৃত্তি হয়।

নিয়ামকটিতে আমি এটি সেট করেছি $scope.data:

DataService.getData().then(function(results){
    $scope.data = results;
});

Where()উপরের মার্কআপের মতো নির্দেশিকা থেকে এক্সটেনশন পদ্ধতি কল করা সমস্যা ছিল। এই সমস্যাটি সমাধান করার জন্য আমি কলটি এক্সটেনশন পদ্ধতির কাছে মার্কআপের পরিবর্তে নিয়ামককে স্থানান্তরিত করেছি:

<div ng-controller="SomeController">
    <myDirective data="openData"></myDirective>
    <myDirective data="closedData"></myDirective>
</div>

এবং নতুন নিয়ামক কোড:

DataService.getData().then(function(results){
    $scope.openData = results.Where('IsOpen',true);
    $scope.closedData = results.Where('IsOpen',false);
});

এটাই আমার মতো সমস্যার মতো মনে হচ্ছে। একটি সাধারণ ফাংশন যা কোনও কিছু আপডেট করে না, তবে একটি স্থানীয় অ্যারে তৈরি করে, একটি বিদ্যমান $ স্কোপ অ্যারের উপরে পুনরাবৃত্তি করে এবং স্থানীয় অ্যারেতে বস্তু তৈরি করে, এবং ফিরে আসে। একবার কল করে এবং এটি একটি স্কোপ সদস্যের মধ্যে সঞ্চয় করে এটি সমস্যার সমাধান করে। ধন্যবাদ। আশা করি আমি জানতাম যে পদ্ধতিটি সরাসরি ব্যবহার করতে সমস্যা হচ্ছে।
AgilePro

2

পার্টিতে বেশ দেরি হয়ে গেছে তবে আমার সমস্যাটি ঘটছিল কারণ কৌণিক 1.5.8 তে ইউআই-রাউটারে ত্রুটি রয়েছে। একটি উল্লেখ করার বিষয় হ'ল আমি এই অ্যাপ্লিকেশনটি চালাচ্ছিলাম এমন প্রথমবারেই এই ত্রুটিটি উপস্থিত হয়েছিল এবং এটি পরে পুনরায় পুনরায় পড়বে না। গিথুব থেকে এই পোস্টটি আমার সমস্যা সমাধান করেছে। মূলত ত্রুটিটি জড়িত থাকে $urlRouterProvider.otherwise("/home") সমাধানটি এর মতো কাজ করে:

$urlRouterProvider.otherwise(function($injector, $location) {
   var $state = $injector.get("$state");
   $state.go("your-state-for-home");
});

2

প্রারম্ভিকদের জন্য আপনাকে answers ঘড়ি ব্যবহার করতে বলার সাথে সমস্ত উত্তর উপেক্ষা করে। কৌণিক ইতিমধ্যে শ্রোতার বন্ধ কাজ করে। আমি আপনাকে গ্যারান্টি দিচ্ছি যে আপনি কেবল এই দিকে চিন্তা করে জিনিসগুলিকে জটিল করছেন।

ব্যবহারকারী - সময়সীমা সম্পর্কে আপনাকে জানানো সমস্ত উত্তর উপেক্ষা করুন। পৃষ্ঠাটি লোড হতে কতক্ষণ সময় নিতে পারে তা আপনি জানতে পারবেন না, সুতরাং এটি সেরা সমাধান নয়।

পৃষ্ঠাটি কখন রেন্ডারিং করা হয় তা কেবল আপনাকে জানতে হবে।

<div ng-app='myApp'>
<div ng-controller="testctrl">
    <label>{{total}}</label>
    <table>
      <tr ng-repeat="item in items track by $index;" ng-init="end($index);">
        <td>{{item.number}}</td>
      </tr>
    </table>
</div>

var app = angular.module('myApp', ["testctrl"]);
var controllers = angular.module("testctrl", []);
 controllers.controller("testctrl", function($scope) {

  $scope.items = [{"number":"one"},{"number":"two"},{"number":"three"}];

  $scope.end = function(index){
  if(index == $scope.items.length -1
        && typeof $scope.endThis == 'undefined'){

            ///  DO STUFF HERE
      $scope.total = index + 1;
      $scop.endThis  = true;
 }
}
});

এনজি-রিপিটকে repeat সূচক দ্বারা সন্ধান করুন এবং যখন অ্যারের দৈর্ঘ্য সূচকের সমান হয় তখন লুপটি থামান এবং আপনার যুক্তিটি করুন।

jsfiddle


1

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


1

এটি অদ্ভুত ... আমি ঠিক একই ত্রুটি পেয়েছি, অন্য কোনও জিনিস থেকে এসেছিল। আমি যখন আমার নিয়ামক তৈরি করি তখন আমি $ অবস্থানের প্যারামিটারটি এইভাবে পাস করেছি passed

App.controller('MessageController', function ($scope, $http, $log, $location, $attrs, MessageFactory, SocialMessageFactory) {
   // controller code
});

এটি একটি বাগ প্রমাণিত হয়েছিল যখন আমরা (এখানে দ্বারা window.location) কিছু সুনির্দিষ্ট নিপূণভাবে পাশে কৌণিক এর হজম এই ত্রুটি গাট্টা হবে তৃতীয় পক্ষের লাইব্রেরি বা বিশুদ্ধ জাতীয় ব্যবহার করুন।

তাই আমি নিয়ামক তৈরি করার প্যারামিটার থেকে simply অবস্থানটি সরিয়ে দিয়েছি এবং এই ত্রুটি ছাড়াই এটি আবার কাজ করেছে। অথবা যদি আপনার একেবারে কৌনিক থেকে $ অবস্থানটি ব্যবহার করার প্রয়োজন হয় তবে আপনাকে <a href="#">link</a>নিজের টেমপ্লেট পৃষ্ঠার লিঙ্কগুলিতে প্রত্যেকটি মুছে ফেলতে হবে এবং href = "" লিখতে হবে । আমার জন্য কাজ করেছেন।

আশা করি এটি একদিন সাহায্য করতে পারে।


0

আপনি যদি কৌণিক ব্যবহার করেন তবে আপনার ব্রাউজার কনসোল থেকে এনজি-স্টোরেজ প্রোফাইল সরান। এটি কোনও সাধারণ সমাধান বিট নয় এটি আমার ক্ষেত্রে কাজ করেছিল।

Chrome এফ 12-> সংস্থানসমূহ-> স্থানীয় স্টোরেজ


0

ফায়ারফক্সকে ৫১ তম সংস্করণে আপগ্রেড করার পরে আমার সাথে এটি ঘটেছে After পরে clearing the cache, সমস্যাটি চলে গেছে।



0

এনজি-এসসিআর থেকে কল করা ফাংশনের রিটার্ন মান হিসাবে $ sce.trustAsResourceUrl () ব্যবহার করার সময় কৌণিক 1.6 -> 1.7 থেকে আপগ্রেড করার পরে আমার সাথে এটি ঘটেছিল। আপনি এখানে উল্লিখিত এই সমস্যাটি দেখতে পারেন

আমার ক্ষেত্রে আমাকে নিম্নলিখিতগুলি পরিবর্তন করতে হয়েছিল।

<source ng-src="{{trustSrc(someUrl)}}" type='video/mp4' />
trustSrc = function(url){
    return $sce.trustAsResourceUrl(url);
};

প্রতি

<source ng-src='{{trustedUrl}} type='video/mp4' />
trustedUrl = $sce.trustAsResourceUrl(someUrl);

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