কৌণিক 2 উপাদান বৈশিষ্ট্যের জন্য কীভাবে ডিফল্ট মান সেট করবেন?


102

কৌনিক 2.0 উপাদান লেখার সময়, কীভাবে কোনও বৈশিষ্ট্যের জন্য ডিফল্ট মান সেট করে?

উদাহরণস্বরূপ - আমি ডিফল্টরূপে সেট fooকরতে চাই 'bar', তবে বাধ্যতামূলকটি অবিলম্বে সমাধান হতে পারে 'baz'। এই জীবনচক্র হুকগুলিতে কীভাবে কার্যকর হয়?

@Component({  
    selector: 'foo-component'
})
export class FooComponent {
    @Input()
    foo: string = 'bar';

    @Input()
    zalgo: string;

    ngOnChanges(changes){
          console.log(this.foo);
          console.log(changes.foo ? changes.foo.previousValue : undefined);
          console.log(changes.foo ? changes.foo.currentValue : undefined);
    }
}

নিম্নলিখিত টেমপ্লেটগুলি দেওয়া, আমি প্রত্যাশা করি মানগুলি কী হবে। আমি কি ভূল?

<foo-component [foo] = 'baz'></foo-component>

কনসোলে লগড:

'baz'
'bar'
'baz'
<foo-component [zalgo] = 'released'></foo-component>

কনসোলে লগড:

'bar'
undefined
undefined

আপনি চেষ্টা করলে কি হয়?
জেবি নিজত

4
@ ব্রায়ানরাইনার বর্তমানে কনসোলের যেভাবে মুদ্রণ হচ্ছে তা সঠিক .. আপনি যে সমস্যার মুখোমুখি হচ্ছেন?
পঙ্কজ পার্কার

6
আমি বর্তমানে কোনও সমস্যার মুখোমুখি হচ্ছি না, কেবল উদ্দেশ্যমূলক আচরণ সম্পর্কে স্পষ্টতা চাইছি। আমার কৌতূহলের উত্তর যখন আমি খুঁজে পেলাম না, তখন আমি সিদ্ধান্ত নিয়েছিলাম যে অন্যদের স্পষ্টতার জন্য একই আকাঙ্ক্ষার ক্ষেত্রে আমি প্রশ্নটি জিজ্ঞাসা করব।
ব্রায়ান রায়নার

আপনার উদাহরণস্বরূপ আপনি @ ইনপুট ()
কিটিমেনপলকু

উত্তর:


142

এটি আকর্ষণীয় বিষয়। এটি কীভাবে কাজ করে তা নির্ধারণ করতে আপনি দুটি লাইফাইসাইকেল হুকের সাথে চারপাশে খেলতে পারেন: ngOnChangesএবং ngOnInit

মূলত আপনি যখন ডিফল্ট মান সেট করেন Inputতার অর্থ এটি তখনই ব্যবহৃত হবে যখন সেই উপাদানটিতে কোনও মান আসবে না। উপাদানটি আরম্ভ করার আগে আকর্ষণীয় অংশটি পরিবর্তন করা হবে।

আসুন ধরা যাক আমাদের দুটি লাইফাইসাইকেল হুক এবং একটি সম্পত্তি আসার সাথে এই জাতীয় উপাদান রয়েছে input

@Component({
  selector: 'cmp',
})
export class Login implements OnChanges, OnInit {
  @Input() property: string = 'default';

  ngOnChanges(changes) {
    console.log('Changed', changes.property.currentValue, changes.property.previousValue);
  }

  ngOnInit() {
    console.log('Init', this.property);
  }

}

পরিস্থিতি ঘ

সংজ্ঞায়িত propertyমান ব্যতীত html- এ অন্তর্ভুক্ত উপাদান

ফলস্বরূপ আমরা কনসোলে দেখতে পাব: Init default

এর অর্থ onChangeট্রিগার করা হয়নি। উদ্যোগ ট্রিগার করা হয়েছিল এবং প্রত্যাশার মতো propertyমান default

পরিস্থিতি 2

সংযুক্ত সম্পত্তি সহ এইচটিএমএলে অন্তর্ভুক্ত উপাদান <cmp [property]="'new value'"></cmp>

ফলস্বরূপ আমরা কনসোলে দেখতে পাব:

Changed new value Object {}

Init new value

এবং এই এক আকর্ষণীয়। প্রথমত আলোড়ন সৃষ্টি ছিল onChangeহুক, যা setted propertyকরতে new valueএবং পূর্ববর্তী মান ছিল খালি বস্তুর ! এবং কেবলমাত্র সেই onInitহুকের নতুন মান সহ ট্রিগার হয়েছিল property


8
এই আচরণের জন্য অফিসিয়াল ডক্সের কোনও লিঙ্ক আছে? এর পিছনে যুক্তি এবং যুক্তি বোঝা ভাল হবে, সংস্করণ অনুসারে আচরণটি কী তা ট্র্যাক করতে সক্ষম হবেন।
ব্রায়ান রায়নার

আমি এই জাতীয় তথ্য দেখিনি, উপরের সমস্তটি আমার নিজের তদন্ত। আমি মনে করি আপনি সংকলিত জেএস ফাইলগুলি পড়লে আপনি আরও উত্তরগুলি পেতে পারেন
মিক্কি

4
আমি @Inputডিফল্ট মান থাকার বিষয়ে ডকুমেন্টেশন সন্ধান করছিলাম । @ স্লাইসপেইনের উপাদান লাইফসাইকের জন্য ডক্সের একটি লিঙ্ক রয়েছে তবে ডকুমেন্টেশনে ব্যবহৃত একটি ডিফল্ট মান আমি পাইনি।
nycynik

@nycynik কেবল এটি ডিফল্ট মানগুলির জন্য ব্যবহার করুন:@Input() someProperty = 'someValue';
ম্যাজিকমেকার

4
তুমি লাইফসেভার এটি আমার মাথায় আঘাত পেয়েছিল, যখন অ্যাংুলারজেএস অ্যাপ থেকে অ্যাংুলার x.x এ আপগ্রেড করা হয়েছিল
অ্যান্ডিস

9

এটির জন্য সেরা সমাধান এখানে। (আঙ্গুলের সমস্ত সংস্করণ)

সম্বোধনের সমাধান : @ ইনপুট ভেরিয়েবলের জন্য একটি ডিফল্ট মান সেট করতে । যদি কোনও ইনপুট ভেরিয়েবলের কোনও মান পাস করা হয় না তবে এটি ডিফল্ট মানটি গ্রহণ করবে

আমি এই জাতীয় অনুরূপ প্রশ্নের সমাধান সরবরাহ করেছি। আপনি এখানে থেকে সম্পূর্ণ সমাধান খুঁজে পেতে পারেন

export class CarComponent implements OnInit {
  private _defaultCar: car = {
    // default isCar is true
    isCar: true,
    // default wheels  will be 4
    wheels: 4
  };

  @Input() newCar: car = {};

  constructor() {}

  ngOnInit(): void {

   // this will concate both the objects and the object declared later (ie.. ...this.newCar )
   // will overwrite the default value. ONLY AND ONLY IF DEFAULT VALUE IS PRESENT

    this.newCar = { ...this._defaultCar, ...this.newCar };
   //  console.log(this.newCar);
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.