এক্সপ্রেশন ___ এটি যাচাই করার পরে পরিবর্তিত হয়েছে


286

এই সাধারণ নিমজ্জনে কেন উপাদান

@Component({
  selector: 'my-app',
  template: `<div>I'm {{message}} </div>`,
})
export class App {
  message:string = 'loading :(';

  ngAfterViewInit() {
    this.updateMessage();
  }

  updateMessage(){
    this.message = 'all done loading :)'
  }
}

নিক্ষেপ:

ছাড়: এক্সপ্রেসন 'আমি @ 0: 5' অ্যাপে "আমি {{বার্তা} '" এটি পরীক্ষা করার পরে পরিবর্তিত হয়েছে। পূর্ববর্তী মান: 'আমি লোড করছি :('। বর্তমান মান: 'আমি সমস্ত লোড করা শেষ করেছি :)' এ [আমি @ {I'm বার্তা ing App অ্যাপে @ 0: 5]

আমার মতামত শুরু হওয়ার সাথে সাথে যখন আমি সমস্ত করছি তখন একটি সাধারণ বাঁধাই আপডেট করা হয়?


7
নিবন্ধটি আপনাকে ExpressionChangedAfterItHasBeenCheckedErrorত্রুটি সম্পর্কে যা কিছু জানতে হবে সেগুলি আচরণকে দুর্দান্ত বিবরণে ব্যাখ্যা করে।
ম্যাক্স কোরেস্তস্কি


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

উত্তর:


292

যেমন ড্রউমূড় বলেছেন, এই ক্ষেত্রে সঠিক সমাধান হ'ল ম্যানুয়ালি বর্তমান উপাদানটির জন্য পরিবর্তন সনাক্তকরণকে ট্রিগার করা trigger এটি অবজেক্টের detectChanges()পদ্ধতি ChangeDetectorRefথেকে (আমদানিকৃত angular2/core) বা এর markForCheck()পদ্ধতি ব্যবহার করে করা হয়, যা কোনও প্যারেন্ট উপাদানগুলি আপডেট করে। প্রাসঙ্গিক উদাহরণ :

import { Component, ChangeDetectorRef, AfterViewInit } from 'angular2/core'

@Component({
  selector: 'my-app',
  template: `<div>I'm {{message}} </div>`,
})
export class App implements AfterViewInit {
  message: string = 'loading :(';

  constructor(private cdr: ChangeDetectorRef) {}

  ngAfterViewInit() {
    this.message = 'all done loading :)'
    this.cdr.detectChanges();
  }

}

এখানেও Plunkers প্রদর্শক হয় ngOnInit , setTimeout এবং enableProdMode ধরো যদি পন্থা।


7
আমার ক্ষেত্রে আমি একটি মডেল খুলছিলাম। মোডালটি খোলার পরে এটি "এক্সপ্রেশন ___ যাচাই করার পরে এটি পরিবর্তিত হয়েছে" বার্তাটি দেখিয়েছিল, সুতরাং আমার সমাধানটি যুক্ত করা হয়েছে this.cdr.detectChanges (); আমার মডেল খুলুন পরে। ধন্যবাদ!
জর্জি ক্যাসেরিগো

সিডিআর সম্পত্তির জন্য আপনার ঘোষণাটি কোথায়? আমি ঘোষণার cdr : anyআওতায় এমন একটি লাইন বা এর মতো কিছু দেখতে পাব বলে আশা করব message। শুধু উদ্বিগ্ন আমি কিছু মিস করেছি?
কোডকবি

1
@ কোডক্যাবি এটি নির্মাণকারীর যুক্তিতে রয়েছে।
স্লস্কি

1
এই রেজোলিউশন আমার সমস্যার সমাধান! অনেক ধন্যবাদ! খুব পরিষ্কার এবং সহজ উপায়।
lwozniak

3
এটি আমাকে সাহায্য করেছিল - কয়েকটি পরিবর্তন করে। আমি এনজিফোর্ড লুপের মাধ্যমে উত্পাদিত এলআই উপাদানগুলিকে স্টাইল করতে হয়েছিল। 'বাছাই' ক্লিক করার পরে ইনারটেক্সটের ভিত্তিতে তালিকার আইটেমগুলির মধ্যে আমার স্প্যানগুলির রঙ পরিবর্তন করা দরকার যা একটি বাছাই করা পাইপের একটি প্যারামিটার হিসাবে ব্যবহৃত হচ্ছে একটি বুলকে আপডেট করেছে (সাজানো ফলাফলটি ডেটার অনুলিপি ছিল, সুতরাং শৈলীগুলি পাচ্ছিল না) একা এনজিস্টাইল দিয়ে আপডেট করা হয়েছে)। - 'আফটারভিউআইনিট' ব্যবহার করার পরিবর্তে, আমি 'আফটারভিউ চেকড' ব্যবহার করেছি - আমি আফটারভিউ চেকড আমদানিবাস্তবায়ন করতেও নিশ্চিত করেছিলাম। দ্রষ্টব্য: পাইপটিকে 'খাঁটি: মিথ্যা' এ সেট করা কাজ করছে না, আমাকে এই অতিরিক্ত পদক্ষেপটি যুক্ত করতে হয়েছিল (:
ক্লো করিগান

170

প্রথমে মনে রাখবেন এই ব্যতিক্রমটি কেবল তখনই ছুঁড়ে ফেলা হবে যখন আপনি নিজের অ্যাপ্লিকেশনটি ডেড মোডে চালাচ্ছেন (এটি বিটা -0-র হিসাবে ডিফল্টরূপে কেস): আপনি যদি enableProdMode()অ্যাপ্লিকেশনটি বুটস্ট্র্যাপ করার সময় কল করেন তবে তা নিক্ষেপ হবে না ( দেখুন দেখুন) আপডেট প্লাঙ্ক )।

দ্বিতীয়ত, এটি করবেন না কারণ এই ব্যতিক্রমটি যথাযথ কারণে নিক্ষেপ করা হচ্ছে: সংক্ষেপে, যখন দেব মোডে থাকে, তখন প্রতিটি দফার পরিবর্তন সনাক্তকরণের সাথে সাথেই দ্বিতীয় রাউন্ড অনুসরণ করা হয় যা নিশ্চিত করে যে কোনও বাঁধাই প্রথমটির শেষের পরে পরিবর্তিত হয়নি, যেহেতু এটি ইঙ্গিত করে যে পরিবর্তনগুলি নিজেই সনাক্তকরণের কারণে ঘটছে।

আপনার প্লাঙ্কে, বাঁধাই {{message}}আপনার কল দ্বারা পরিবর্তিত হয় setMessage()যা ngAfterViewInitহুকের মধ্যে ঘটে যা প্রাথমিক পরিবর্তন সনাক্তকরণের পরিবর্তনের অংশ হিসাবে ঘটে। যদিও এটি নিজেই সমস্যাযুক্ত নয় - সমস্যাটি হ'ল setMessage()বাঁধাই পরিবর্তন করে তবে পরিবর্তন সনাক্তকরণের নতুন রাউন্ডটি ট্রিগার করে না, যার অর্থ এই পরিবর্তনটি সনাক্ত করা যাবে না যতক্ষণ না ভবিষ্যতে পরিবর্তন পরিবর্তন সনাক্তকরণের অন্য কোথাও ট্রিগার না করা হয়।

টেকওয়ে: যে কোনও কিছু যা বাধ্যতামূলক পরিবর্তন করে তা পরিবর্তনের সনাক্তকরণের একটি রাউন্ডকে ট্রিগার করতে হবে।

এটি কীভাবে করবেন তার উদাহরণের জন্য সমস্ত অনুরোধের প্রতিক্রিয়ায় আপডেট করুন : @ টাইকোর সমাধানটি কাজ করে, যেমনটি উত্তরটির তিনটি পদ্ধতি @ মার্কক্যাজকোক নির্দেশ করেছেন do তবে প্রকৃতপক্ষে, তারা সকলেই আমার কাছে কুৎসিত এবং ভুল অনুভব করে, যেমন আমরা এনজি 1-তে ঝুঁকে পড়তে অভ্যস্ত হয়েছি।

নিশ্চিত হয়ে ওঠার জন্য, এই হ্যাকগুলি যথাযথ হওয়ার জন্য মাঝে মাঝে পরিস্থিতি রয়েছে তবে আপনি যদি এটিকে খুব সামঞ্জস্যপূর্ণ ভিত্তির চেয়ে বেশি কিছু ব্যবহার করে থাকেন তবে এটি একটি চিহ্ন যে আপনি এর প্রতিক্রিয়াশীল প্রকৃতি পুরোপুরি আলিঙ্গন করার চেয়ে কাঠামোর সাথে লড়াই করছেন।

এই প্রোগ্রামটিতে, আরো কথ্য, "Angular2 পথ" সমীপবর্তী এই লাইন বরাবর কিছু হল: ( সজোরে আঘাত )

@Component({
  selector: 'my-app',
  template: `<div>I'm {{message | async}} </div>`
})
export class App {
  message:Subject<string> = new BehaviorSubject('loading :(');

  ngAfterViewInit() {
    this.message.next('all done loading :)')
  }
}

13
কেন সেটম্যাসেজ () পরিবর্তন সনাক্তকরণের নতুন রাউন্ডে ট্রিগার করে না? আমি ভেবেছিলাম যখন আপনি ইউআই-তে কোনও কিছুর মান পরিবর্তন করেন তখন কৌনিক 2 স্বয়ংক্রিয়ভাবে পরিবর্তন সনাক্তকরণ শুরু করে।
ড্যানি লাবিন

4
@ ড্রুমুওর "যে কোনও কিছু যা বাধ্যতামূলক পরিবর্তন করে তা পরিবর্তনের সনাক্তকরণের একটি রাউন্ডকে ট্রিগার করতে হবে যখন এটি হয়"। কিভাবে? এটি কি একটি ভাল অনুশীলন? সব কি একক দৌড় শেষ করা উচিত নয়?
ড্যানিয়েল বিরোস্কি পপেস্কি

2
@ টিচো, সত্যই। যেহেতু আমি সেই মন্তব্যটি লিখেছি, আমি অন্য প্রশ্নের উত্তর দিয়েছি যেখানে আমি পরিবর্তন সনাক্তকরণ চালানোর 3 টি উপায় বর্ণনা করি যার মধ্যে রয়েছে detectChanges()
মার্ক রাজকক

4
কেবলমাত্র লক্ষণীয়ভাবে, বর্তমান প্রশ্ন updateMessagesetMessage
সংস্থায়

3
@ ডায়নিল, আমি একই অনুভূতি পেয়েছি, যতক্ষণ না আমি প্রশ্নের অধীনে মন্তব্যে প্রদত্ত ব্লগটি পড়েছি: blog.angularindepth.com/… এটি কেন ম্যানুয়ালি করা দরকার তা ব্যাখ্যা করে। এই ক্ষেত্রে, কৌণিকের পরিবর্তন সনাক্তকরণের একটি জীবনচক্র রয়েছে। যদি এই লাইফসাইকেলের মধ্যে কোনও মান মান পরিবর্তন করে, তবে একটি শক্তিশালী পরিবর্তন সনাক্তকরণ চালানো প্রয়োজন (বা একটি সেটটাইমআউট - যা পরবর্তী ইভেন্ট লুপে সঞ্চালিত হয়, আবার পরিবর্তন সনাক্তকরণকে ট্রিগার করে)।
মহেশ

50

ngAfterViewChecked() আমার জন্য কাজ করেছেন:

import { Component, ChangeDetectorRef } from '@angular/core'; //import ChangeDetectorRef

constructor(private cdr: ChangeDetectorRef) { }
ngAfterViewChecked(){
   //your code to update the model
   this.cdr.detectChanges();
}

যেমন আঁকার উল্লেখ করা হয়েছে, কৌণিকের পরিবর্তন সনাক্তকরণ চক্র যা দুটি ধাপের, সন্তানের দৃষ্টিভঙ্গি পরিবর্তনের পরে পরিবর্তনগুলি সনাক্ত করতে হবে এবং আমি এটি করার সর্বোত্তম উপায়টি অনুভব করছি যে নিজেই কৌণিক দ্বারা সরবরাহিত লাইফেসাইক্লাল হুক ব্যবহার করছি, এবং ম্যানুয়ালি নিজেই কৌনিক জিজ্ঞাসা করছি পরিবর্তনটি সনাক্ত করুন এবং এটি আবদ্ধ করুন। আমার ব্যক্তিগত মতামত এটি একটি উপযুক্ত উত্তর বলে মনে হচ্ছে।
জোয়ি 587

1
একসাথে ভিতরে ক্রমবর্ধমান গতিশীল উপাদান লোড করার জন্য, এটি আমার জন্য কাজ।
মেহেদী দাউস্তনী

47

আমি কৌনিক মূল থেকে চেঞ্জডেস্টেকশনস্ট্রেজি যোগ করে এটি ঠিক করেছি।

import {  Component, ChangeDetectionStrategy } from '@angular/core';
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: 'page1',
  templateUrl: 'page1.html',
})

এটি আমার পক্ষে কাজ করেছে। আমি আশ্চর্য হই যে এর মধ্যে এবং চেঞ্জডেক্টরআরফ ব্যবহারের মধ্যে তফাত কী আছে
এরি

1
হুম ... তারপরে পরিবর্তন ডিটেক্টরের মোডটি প্রাথমিকভাবে সেট করা হবে CheckOnce( ডকুমেন্টেশন )
অ্যালেক্স ক্লাউস

হ্যাঁ, ত্রুটি / সতর্কতা চলে গেছে। তবে এটি আগের চেয়ে 5-7 সেকেন্ডের পার্থক্যের চেয়ে অনেক বেশি লোডিং সময় নিচ্ছে যা বিশাল।
কপিল রঘুয়ানশি

1
@ কপিলরাগুওয়ানশি this.cdr.detectChanges();আপনি যা বোঝার চেষ্টা করছেন তার পরে চালান । কারণ এটি হতে পারে কারণ পরিবর্তন সনাক্তকরণটি ট্রিগার করছে না
হর্ষাল কার্পেন্টার

36

ngOnInitআপনি কেবল সদস্যের পরিবর্তনশীল পরিবর্তনের কারণে আপনি ব্যবহার করতে পারবেন না message?

আপনি যদি কোনও সন্তানের উপাদানটির একটি রেফারেন্স অ্যাক্সেস করতে চান @ViewChild(ChildComponent)তবে আপনাকে অবশ্যই এটির জন্য অপেক্ষা করতে হবে ngAfterViewInit

একটি নোংরা ফিক্স হ'ল updateMessage()উদাহরণস্বরূপ সেটটাইমআউট সহ পরবর্তী ইভেন্ট লুপে কল করা।

ngAfterViewInit() {
  setTimeout(() => {
    this.updateMessage();
  }, 1);
}

4
আমার কোডটি এনজিওনিট পদ্ধতিতে পরিবর্তন করা আমার পক্ষে কাজ করেছিল।
ফালিওর্ন

29

এর জন্য আমি উপরের উত্তরগুলি চেষ্টা করেছি অনেকগুলি অ্যাংুলার (6 বা তার পরে) এর সর্বশেষ সংস্করণে কাজ করে না

আমি উপাদান নিয়ন্ত্রণ ব্যবহার করছি যা প্রথম বাঁধাইয়ের পরে পরিবর্তনগুলি প্রয়োজন inding

    export class AbcClass implements OnInit, AfterContentChecked{
        constructor(private ref: ChangeDetectorRef) {}
        ngOnInit(){
            // your tasks
        }
        ngAfterContentChecked() {
            this.ref.detectChanges();
        }
    }

আমার উত্তরটি যোগ করার ফলে এটি কিছু নির্দিষ্ট সমস্যা সমাধানে সহায়তা করে।


এটি আসলে আমার ক্ষেত্রে কাজ করেছে, তবে আপনার টাইপ রয়েছে, আফটার কনটেন্টচেকড প্রয়োগের পরে আপনাকে এনজিএফটারকন্টেন্টচেকড করা উচিত, এনজিএফটারভিউআইনিট নয়।
টমাস লুয়াক

আমি বর্তমানে 8.2.0 সংস্করণে আছি :)
টমাস লুকাক

1
@ টমলুকáč উত্তরের জন্য ধন্যবাদ, আমি আমার উত্তরটি আপডেট করেছি (y)
মার্মিক

1
উপরের কোনওটি যদি কাজ না করে তবে আমি এই উত্তরটি সুপারিশ করছি।
আমির চৌবাণী

পরে কনট্যান্টচেকডকে ডমকে পুনরায় গণনা বা পুনঃনির্মাণের সময় বলা হয়। কৌনিক সংস্করণ 9 থেকে অবহিত করা
ইমরান ফারুকী

24

নিবন্ধটি আপনাকে ExpressionChangedAfterItHasBeenCheckedErrorত্রুটি সম্পর্কে যা কিছু জানতে হবে সেগুলি আচরণকে দুর্দান্ত বিবরণে ব্যাখ্যা করে।

আপনার সেটআপ করার ক্ষেত্রে সমস্যাটি হ'ল ngAfterViewInitলাইফসাইকেল হুকটি পরিবর্তন সনাক্তকরণ প্রসেসড ডিওএম আপডেটের পরে কার্যকর করা হয়। এবং আপনি কার্যকরভাবে এই হুকের টেম্পলেটে ব্যবহৃত সম্পত্তিটি পরিবর্তন করছেন যার অর্থ DOM কে পুনরায় রেন্ডার করা দরকার:

  ngAfterViewInit() {
    this.message = 'all done loading :)'; // needs to be rendered the DOM
  }

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

এটির সমাধানের জন্য আপনার কাছে মূলত দুটি বিকল্প রয়েছে:

  • অসম্পূর্ণভাবে সম্পত্তিটি আপডেট করুন setTimeout, Promise.thenঅথবা টেমপ্লেটে উল্লেখ করা অ্যাসিনক্রোনাস পর্যবেক্ষণযোগ্য

  • ডিওএম আপডেটের আগে সম্পত্তি আপডেটটি হুকের মধ্যে সম্পাদন করুন - এনজিওআইনিট, এনজিডোচেক, এনজিএফটারকন্টেন্টিট, এনজিএফটারকন্টেন্টচেকড।


আপনার নিবন্ধগুলি পড়ুন: blog.angularindepth.com/… , শীঘ্রই অন্য একটি ব্লগ.আঙ্গুলারিলিপথ . com/… পড়বেন । এখনও এই সমস্যার সমাধান খুঁজে বের করতে পারেনি। আমি যদি ngDoCheck বা ngAfterContentChecked লাইফসাইকেল হুক যোগ করি এবং এই cdr.markForCheck () যুক্ত করে তবে কী ঘটতে পারে তা আমাকে বলতে পারেন; (চেঞ্জডেেক্টরআরফের জন্য সিডিআর) এর অভ্যন্তরে। জীবনচক্র হুক এবং পরবর্তী চেক সম্পূর্ণ হওয়ার পরে পরিবর্তনগুলি পরীক্ষা করার জন্য এটি কি সঠিক উপায় নয়?
হার্সিমার

9

আপনাকে কেবলমাত্র আপনার বার্তাটি সঠিক লাইফাইসাইকেল হুকটিতে আপডেট করতে ngAfterContentCheckedহবে ngAfterViewInit, এক্ষেত্রে এর পরিবর্তে , কারণ এনজিএফটারভিউয়ে্নে পরিবর্তনশীল বার্তার জন্য একটি চেক শুরু করা হয়েছে তবে এখনও শেষ হয়নি।

দেখুন: https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!# afterview

কোডটি ঠিক হবে:

import { Component } from 'angular2/core'

@Component({
  selector: 'my-app',
  template: `<div>I'm {{message}} </div>`,
})
export class App {
  message: string = 'loading :(';

  ngAfterContentChecked() {
     this.message = 'all done loading :)'
  }      
}

প্লাঙ্কারে ওয়ার্কিং ডেমো দেখুন ।


আমি একটি @ViewChildren()দৈর্ঘ্য-ভিত্তিক কাউন্টারটির সংমিশ্রণটি ব্যবহার করছিলাম যা একটি পর্যবেক্ষণযোগ্য দ্বারা জনপ্রিয় হয়েছিল। এটি ছিল আমার জন্য একমাত্র সমাধান যা কাজ করেছিল!
মিসানফোর্ড

2
উপর থেকে ngAfterContentCheckedএবং এর সংমিশ্রণটি ChangeDetectorRefআমার পক্ষে কাজ করেছিল। উপর ngAfterContentCheckedনামক -this.cdr.detectChanges();
কুনাল Dethe

7

এই ত্রুটিটি আসছে কারণ বিদ্যমান মানটি আরম্ভ করার পরে অবিলম্বে আপডেট হচ্ছে। তাই আপনি যদি নতুন মান আপডেট হবে পরে বিদ্যমান মান DOM মধ্যে অনুষ্ঠিত হয়, তাহলে এটি fine.Like এই প্রবন্ধে উল্লেখ কাজ করবে কৌণিক ডিবাগ "পরে এটা চেক করা হয় এক্সপ্রেশন পরিবর্তিত হয়েছে"

উদাহরণস্বরূপ আপনি ব্যবহার করতে পারেন

ngOnInit() {
    setTimeout(() => {
      //code for your new value.
    });

}

অথবা

ngAfterViewInit() {
  this.paginator.page
      .pipe(
          startWith(null),
          delay(0),
          tap(() => this.dataSource.loadLessons(...))
      ).subscribe();
}

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

ফিলিপ রবার্টস যে কোনও ইউটিউব ভিডিওতে হ্যাক (হ্যাকটি কী ইভেন্ট লুপ?) এ ব্রাউজার এপিআই এনভোকস কনসেপ্টটি কীভাবে ব্যাখ্যা করেছেন।


4

আপনি ngOnInt () - এ পদ্ধতিতে আপডেট মেসেজ () এ আপনার কলটিও রাখতে পারেন - পদ্ধতি, কমপক্ষে এটি আমার পক্ষে কাজ করে

ngOnInit() {
    this.updateMessage();
}

আরসি 1 এ এটি ব্যতিক্রম ট্রিগার করে না


3

আপনি rxjs Observable.timerফাংশনটি ব্যবহার করে একটি টাইমার তৈরি করতে পারেন এবং তারপরে আপনার সাবস্ক্রিপশনে বার্তাটি আপডেট করতে পারেন:                    

Observable.timer(1).subscribe(()=> this.updateMessage());

2

এটি একটি ত্রুটি ফেলে কারণ এনজিএফটারভিউআইনিট () কল করা হলে আপনার কোড আপডেট হয়। মানে যখন এনজিএফটারভিউআইনিট সংঘটিত হবে তখন আপনার প্রাথমিক মানটি পরিবর্তিত হয়েছে, আপনি যদি এটি এনজিএফটারকন্টেন্টইনাইট () এ কল করেন তবে এটি ত্রুটি ছুঁড়ে ফেলবে না।

ngAfterContentInit() {
    this.updateMessage();
}

0

আমি যথেষ্ট পরিমাণে খ্যাতি অর্জন করতে পারছি না বলে @ বিরাঞ্চির পোস্টে আমি মন্তব্য করতে পারিনি, তবে এটি আমার জন্য সমস্যাটি স্থির করেছে।

একটি বিষয় লক্ষ্য করুন! যদি changeDetection যোগ করা হয়: ChangeDetectionStrategy.OnPush the উপাদানটিতে কাজ করে না, এবং এটির একটি শিশু উপাদান (বোবা উপাদান) এটি প্যারেন্টে যুক্ত করার চেষ্টাও করে।

এটি ত্রুটিটি ঠিক করেছে, তবে আমি এর আশ্চর্যের কারণ হতে পারি।


0

ডেটাটেবলের সাথে কাজ করার সময় আমি একইরকম ত্রুটি পেয়েছি। যখন আপনি অন্য এনজিওর জন্য * এনজিফোর্ড ব্যবহার করেন তখন কী হয় তা ডেটিয়েটেবল এই ত্রুটিটি ছুঁড়ে দেয় কারণ এটি কৌনিক পরিবর্তন চক্রকে ইন্ট্রিপেট করে। ডেটেবলের ভিতরে ডেটেবল ব্যবহারের পরিবর্তে একটি নিয়মিত টেবিল ব্যবহার করুন বা এমফ.ডেটাকে অ্যারের নামের সাথে প্রতিস্থাপন করুন। এটি কাজ করে।


0

আমি মনে করি একটি সহজ সমাধান নিম্নরূপ হবে:

  1. ফাংশন বা সেটারের মাধ্যমে কিছু পরিবর্তনশীলকে একটি মূল্য নির্ধারণের একটি বাস্তবায়ন করুন।
  2. ক্লাসে ক্লাস ভেরিয়েবল তৈরি করুন (static working: boolean)যেখানে এই ফাংশনটি উপস্থিত রয়েছে এবং আপনি যখনই ফাংশনটি কল করবেন তখন কেবল আপনার পছন্দমতো সত্য করুন। ফাংশনটির মধ্যে, যদি কাজের মানটি সত্য হয়, তবে কিছু না করে সরাসরি ফিরিয়ে দিন। অন্যথায়, আপনি চান টাস্কটি সম্পাদন করুন। টাস্কটি সম্পূর্ণ হওয়ার পরে এই ভেরিয়েবলটিকে ভুয়াতে পরিবর্তন করার বিষয়টি নিশ্চিত করুন, কোডের লাইনের শেষে বা সাবস্ক্রাইব পদ্ধতির মধ্যে যখন আপনি মূল্য নির্ধারণের কাজ শেষ করেন!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.