কৌণিক 2 এ অন্য উপাদানগুলিকে কীভাবে কল করা যায়


154

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

উপাদান 1:

@component(
    selector:'com1'
)
export class com1{
    function1(){...}
}

উপাদান 2:

@component(
    selector:'com2'
)
export class com2{
    function2(){...
        // i want to call function 1 from com1 here
    }
}

আমি চেষ্টা করার চেষ্টা করেছি @inputএবং @outputতবে ঠিক কীভাবে এটি ব্যবহার করব এবং কীভাবে সেই ফাংশনটি কল করতে হবে বুঝতে পারছি না, কেউ সাহায্য করতে পারে?


উত্তর:


130

যদি com1 এবং com2 ভাইবোন হয় তবে আপনি ব্যবহার করতে পারেন

@component({
  selector:'com1',
})
export class com1{
  function1(){...}
}

com2 একটি ব্যবহার করে একটি ইভেন্ট নির্গত করে EventEmitter

@component({
  selector:'com2',
  template: `<button (click)="function2()">click</button>`
)
export class com2{
  @Output() myEvent = new EventEmitter();
  function2(){...
    this.myEvent.emit(null)
  }
}

এখানে প্যারেন্ট উপাদানগুলি ইভেন্ট শোনার জন্য একটি ইভেন্টের সাথে যুক্ত হয় myEventএবং তারপরে com1.function1()যখন এই জাতীয় ঘটনা ঘটে তখন কল করে calls #com1এটি একটি টেম্পলেট ভেরিয়েবল যা টেম্পলেটটির অন্য কোথাও থেকে এই উপাদানটি উল্লেখ করতে দেয়। আমরা করতে এটি ব্যবহার function1()জন্য ইভেন্ট হ্যান্ডলার myEventএর com2:

@component({
  selector:'parent',
  template: `<com1 #com1></com1><com2 (myEvent)="com1.function1()"></com2>`
)
export class com2{
}

উপাদানগুলির মধ্যে যোগাযোগের জন্য অন্যান্য বিকল্পগুলির জন্য উপাদান-ইন্টারঅ্যাকশনও দেখুন


আপনার প্রশ্নে পিতামাতা বাচ্চা সম্পর্কে কিছু নেই। আপনি কি অর্জন করার চেষ্টা করেন?
গন্টার জ্যাচবাউয়ার

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

এটি ভাই বোনদের বাবা (আপনি হোস্টও বলতে পারেন)। <sibling1 (myEvent)="...">পিতামাতা / হোস্টের জন্য একটি ইভেন্টের বাধ্যবাধকতা, কারণ এটিই একমাত্র উপায় অ্যাঙ্গুলার সরবরাহ করে। ইভেন্ট হ্যান্ডলার অবশ্য অন্য ভাইবোন ( com1) এ একটি পদ্ধতি কল করে । পিতামাতার একটি মধ্যস্থতাকারী হিসাবে ব্যবহৃত হয়।
গন্টার জ্যাচবাউয়ার

কীভাবে এটিকে কল করা যায় ?! শুধু ভিতরে somecomponent.ts?
মোহাম্মদ করমানি

তবে যদি তালিকার কিছু ব্যবহারকারীর জন্য দুটি ভিন্ন উপাদান (অন ক্লিকের ইভেন্ট ((একটি উপাদান)) থাকে এবং বিশদ পৃষ্ঠায় ক্লিক করা ইভেন্টটি অনুলিপি করে (অন্য উপাদান)) - এক উপাদান উপাদান থেকে আমি অন্য উপাদানটিতে ব্যবহার করতে চাই, কীভাবে এটি করা যায় দয়া করে আমাকে বলবেন ??? @ গন্তেরজ্যাচবাউয়ার
জিগনেশ বাঘ

164

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

উপাদানগুলির মধ্যে কি ধরণের সম্পর্ক থাকতে পারে?

1. পিতা বা মাতা> শিশু

এখানে চিত্র বর্ণনা লিখুন

ইনপুট মাধ্যমে ডেটা ভাগ করে নেওয়া

এটি সম্ভবত ডেটা ভাগ করার সবচেয়ে সাধারণ পদ্ধতি। এটি @Input()টেমপ্লেটের মাধ্যমে ডেটা প্রেরণ করার জন্য ডেকরেটার ব্যবহার করে কাজ করে ।

parent.component.ts

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

@Component({
  selector: 'parent-component',
  template: `
    <child-component [childProperty]="parentProperty"></child-component>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent{
  parentProperty = "I come from parent"
  constructor() { }
}

child.component.ts

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

@Component({
  selector: 'child-component',
  template: `
      Hi {{ childProperty }}
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent {

  @Input() childProperty: string;

  constructor() { }

}

এটি একটি খুব সাধারণ পদ্ধতি। এটা ব্যবহার করা সহজ। আমরা এনজিওনচেনজ ব্যবহার করে শিশু উপাদানগুলির ডেটাগুলিতে পরিবর্তনগুলিও ধরতে পারি

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

2. শিশু> পিতামাতার

এখানে চিত্র বর্ণনা লিখুন

ভিউচিল্ডের মাধ্যমে ডেটা ভাগ করা

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

parent.component.ts

import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { ChildComponent } from "../child/child.component";

@Component({
  selector: 'parent-component',
  template: `
    Message: {{ message }}
    <child-compnent></child-compnent>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent implements AfterViewInit {

  @ViewChild(ChildComponent) child;

  constructor() { }

  message:string;

  ngAfterViewInit() {
    this.message = this.child.message
  }
}

child.component.ts

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

@Component({
  selector: 'child-component',
  template: `
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent {

  message = 'Hello!';

  constructor() { }

}

আউটপুট () এবং ইভেন্টইমিটারের মাধ্যমে ডেটা ভাগ করা

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

parent.component.ts

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

@Component({
  selector: 'parent-component',
  template: `
    Message: {{message}}
    <child-component (messageEvent)="receiveMessage($event)"></child-component>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent {

  constructor() { }

  message:string;

  receiveMessage($event) {
    this.message = $event
  }
}

child.component.ts

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

@Component({
  selector: 'child-component',
  template: `
      <button (click)="sendMessage()">Send Message</button>
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent {

  message: string = "Hello!"

  @Output() messageEvent = new EventEmitter<string>();

  constructor() { }

  sendMessage() {
    this.messageEvent.emit(this.message)
  }
}

৩. ভাইবোন

এখানে চিত্র বর্ণনা লিখুন

শিশু> পিতামাতা> শিশু

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

parent.component.ts

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

@Component({
  selector: 'parent-component',
  template: `
    Message: {{message}}
    <child-one-component (messageEvent)="receiveMessage($event)"></child1-component>
    <child-two-component [childMessage]="message"></child2-component>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent {

  constructor() { }

  message: string;

  receiveMessage($event) {
    this.message = $event
  }
}

সন্তানের one.component.ts

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

@Component({
  selector: 'child-one-component',
  template: `
      <button (click)="sendMessage()">Send Message</button>
  `,
  styleUrls: ['./child-one.component.css']
})
export class ChildOneComponent {

  message: string = "Hello!"

  @Output() messageEvent = new EventEmitter<string>();

  constructor() { }

  sendMessage() {
    this.messageEvent.emit(this.message)
  }
}

সন্তানের two.component.ts

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

@Component({
  selector: 'child-two-component',
  template: `
       {{ message }}
  `,
  styleUrls: ['./child-two.component.css']
})
export class ChildTwoComponent {

  @Input() childMessage: string;

  constructor() { }

}

৪. অপ্রাসঙ্গিক উপাদান

এখানে চিত্র বর্ণনা লিখুন

নীচে বর্ণিত সমস্ত পদ্ধতিগুলি উপাদানগুলির মধ্যে সম্পর্কের জন্য উপরের সমস্ত বিকল্পের জন্য ব্যবহার করা যেতে পারে। তবে প্রত্যেকের নিজস্ব সুবিধা এবং অসুবিধা রয়েছে।

একটি পরিষেবার সাথে ডেটা ভাগ করা

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

data.service.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable()
export class DataService {

  private messageSource = new BehaviorSubject('default message');
  currentMessage = this.messageSource.asObservable();

  constructor() { }

  changeMessage(message: string) {
    this.messageSource.next(message)
  }

}

first.component.ts

import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";

@Component({
  selector: 'first-componennt',
  template: `
    {{message}}
  `,
  styleUrls: ['./first.component.css']
})
export class FirstComponent implements OnInit {

  message:string;

  constructor(private data: DataService) {
      // The approach in Angular 6 is to declare in constructor
      this.data.currentMessage.subscribe(message => this.message = message);
  }

  ngOnInit() {
    this.data.currentMessage.subscribe(message => this.message = message)
  }

}

second.component.ts

import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";

@Component({
  selector: 'second-component',
  template: `
    {{message}}
    <button (click)="newMessage()">New Message</button>
  `,
  styleUrls: ['./second.component.css']
})
export class SecondComponent implements OnInit {

  message:string;

  constructor(private data: DataService) { }

  ngOnInit() {
    this.data.currentMessage.subscribe(message => this.message = message)
  }

  newMessage() {
    this.data.changeMessage("Hello from Second Component")
  }

}

একটি রুটের সাথে ডেটা ভাগ করা

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

ক্যোয়ারী প্যারামিটারগুলি /people?id=যেখানে idযে কোনও কিছুর সমান করতে পারে এবং আপনার ইচ্ছামতো প্যারামিটার থাকতে পারে তার প্রান্তে আরও বেশি তাকান । ক্যোয়ারী প্যারামিটারগুলি অ্যাম্পারস্যান্ড অক্ষর দ্বারা পৃথক করা হবে।

ক্যোয়ারী প্যারামিটারগুলির সাথে কাজ করার সময় আপনার রুট ফাইলে সেগুলি সংজ্ঞায়িত করার দরকার নেই এবং সেগুলি পরামিতি হিসাবে নামকরণ করা যেতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত কোড নিন:

page1.component.ts

import {Component} from "@angular/core";
import {Router, NavigationExtras} from "@angular/router";

@Component({
    selector: "page1",
  template: `
    <button (click)="onTap()">Navigate to page2</button>
  `,
})
export class Page1Component {

    public constructor(private router: Router) { }

    public onTap() {
        let navigationExtras: NavigationExtras = {
            queryParams: {
                "firstname": "Nic",
                "lastname": "Raboy"
            }
        };
        this.router.navigate(["page2"], navigationExtras);
    }

}

প্রাপ্তি পৃষ্ঠায়, আপনি নীচের মত এই কোয়েরি পরামিতি পাবেন:

page2.component.ts

import {Component} from "@angular/core";
import {ActivatedRoute} from "@angular/router";

@Component({
    selector: "page2",
    template: `
         <span>{{firstname}}</span>
         <span>{{lastname}}</span>
      `,
})
export class Page2Component {

    firstname: string;
    lastname: string;

    public constructor(private route: ActivatedRoute) {
        this.route.queryParams.subscribe(params => {
            this.firstname = params["firstname"];
            this.lastname = params["lastname"];
        });
    }

}

NgRx

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

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

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

আপনি এনজিআরএক্স সম্পর্কে পড়তে পারেন এবং আপনার অ্যাপে এটি প্রয়োজন কিনা তা বুঝতে পারবেন:

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


3
উদাহরণ সহ সেরা ব্যাখ্যা
আফিফ

1
এই বিষয়টির সর্বোত্তম উত্তর যা আমি কখনই দেখেছি, অভিনন্দন ..
একাকী

দুর্দান্ত ব্যাখ্যা
মাইসেস আগুইলার

এইচটিএমএলে ts চাইল্ড-two.comp घटक.ts প্রদর্শনের নাম ভাইবোনদের চাইল্ডমেসেজ হওয়া উচিত (কেসটি এইচটিএমএল ফাইল ব্যবহারের জন্য)
নাম এনগুইন

84

আপনি উপাদান দুটি থেকে উপাদান এর পদ্ধতি অ্যাক্সেস করতে পারেন ..

componentOne

  ngOnInit() {}

  public testCall(){
    alert("I am here..");    
  }

componentTwo

import { oneComponent } from '../one.component';


@Component({
  providers:[oneComponent ],
  selector: 'app-two',
  templateUrl: ...
}


constructor(private comp: oneComponent ) { }

public callMe(): void {
    this.comp.testCall();
  }

উপাদান দুটি HTML ফাইল

<button (click)="callMe()">click</button>

2
এটি আমার জন্য ততক্ষণ আমার জন্য টেস্টকলের মাধ্যমে কম্পোনেন্টটু থেকে উপাদান দুটিতে একটি পরিবর্তনশীল অ্যাক্সেস করার প্রয়োজন ছিল না .... সেই ক্ষেত্রে যার জন্য ভেরিয়েবলের মানটি উপাদান দ্বারা নির্ধারিত হয় তবে উপাদানটি দুটি ডিফল্ট পাবেন এবং বর্তমানটি পাবেন না।
rey_coder

2
আমি যদি উপাদান উপাদান দুটি থেকে টেস্টকল কল করি তবে আমি পরীক্ষার কল পদ্ধতিতে উপাদানগুলির এক পরিবর্তনশীল মান পাচ্ছি না। কোন ধারণা?
রাজা

অনুগ্রহ করে আয়নিক 4 এর জন্য এই পদ্ধতিটি ব্যাখ্যা করুন
মোহাম্মদ আইয়ুব খান

এইভাবে এটি @ রাজার একই সমস্যা হওয়ার কারণটি ট্রিগার করে না
কেভিন ডায়াস

1
THQQQQQQQQQQ তাই অনেক মানুষ
আশু

33

উপাদান 1 (শিশু):

@Component(
  selector:'com1'
)
export class Component1{
  function1(){...}
}

উপাদান 2 (পিতা বা মাতা):

@Component(
  selector:'com2',
  template: `<com1 #component1></com1>`
)
export class Component2{
  @ViewChild("component1") component1: Component1;

  function2(){
    this.component1.function1();
  }
}

ভাল উত্তর, এখানে দেখুন
সাইফার

ঠিক আছে আমি কীভাবে এইচটিএমএলে ফাংশন 2 কল করি? আমি সর্বদা পেয়েছি এই ডটকম অংশটি 1 অপরিজ্ঞাত
cjuuh

<com1 # উপাদান 1 (ক্লিক করুন) = "ফাংশন 2 ()"> </com1>
ইহোর খোমিয়াক

1
এটি আমার পক্ষে কাজ করেছিল, একবার আমি বুঝতে পেরেছিলাম যে আপনি @ কৌনিক / মূল থেকে ভিউচিল্ড আমদানি করতে হবে এবং যেখানেই রয়েছে কম্পোনেন্ট 1 থেকে।
ডালাস কালে

1
উপাদান শ্রেণিটি প্রসারিত করার পরিবর্তে, আমি আমার পক্ষে @ViewChildকাজ করেছি। এই উদাহরণের জন্য ধন্যবাদ।
যশ

27

এটি আপনার উপাদানগুলির (পিতামাতা / শিশু) মধ্যকার সম্পর্কের উপর নির্ভর করে তবে যোগাযোগের উপাদানগুলি তৈরি করার সর্বোত্তম / জেনেরিক উপায় হল একটি ভাগ করা পরিষেবা ব্যবহার করা।

আরও তথ্যের জন্য এই ডকটি দেখুন:

বলা হচ্ছে, আপনি কম 1 তে কম 2 এর উদাহরণ সরবরাহ করতে নিম্নলিখিতটি ব্যবহার করতে পারেন:

<div>
  <com1 #com1>...</com1>
  <com2 [com1ref]="com1">...</com2>
</div>

কম 2 এ, আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

@Component({
  selector:'com2'
})
export class com2{
  @Input()
  com1ref:com1;

  function2(){
    // i want to call function 1 from com1 here
    this.com1ref.function1();
  }
}

আমি ত্রুটি পাচ্ছি যেটি 'কম 1 রেফ' এর সাথে আবদ্ধ হতে পারে না কারণ এটি কোনও পরিচিত
দেশী

এবং এটি this.com1.function1 () গ্রহণ করছে না; পরিবর্তে this.com1ref.function1 ();
noobPogrammer

টাইপগুলি নির্দেশ করার জন্য ধন্যবাদ! আপনার কি @Inputমাঠে আছে?
থিয়েরি টেম্পিলার

ঠিক আছে এর কাজ, আপনি কি আমাকে বলতে পারেন যে পিতামাতার - সন্তানের সম্পর্কের জন্য একই অর্জন কীভাবে ??
noobPogrammer

1
আমি পিতামাতার সন্তানের জন্যও একই চেষ্টা করেছি তবে এটি অবজ্ঞাত
noobPogrammer

1
  • আসুন বলুন 1 ম উপাদানটি হ'ল ডিবিস্ট্যাটস মেইনকমম্পোনেন্ট
  • ২ য় উপাদান DbstatsGraphComp घटक।
  • 2 ম পদ্ধতি কল করার 1 ম উপাদান

<button (click)="dbgraph.displayTableGraph()">Graph</button> <dbstats-graph #dbgraph></dbstats-graph>

#dbgraphসন্তানের উপাদানগুলির স্থানীয় ভেরিয়েবলটি নোট করুন , যা পিতামাতার তার পদ্ধতিগুলি অ্যাক্সেস করতে ব্যবহার করতে পারেন dbgraph.displayTableGraph()


0

ডেটাসারভাইস ব্যবহার করে আমরা অন্য উপাদান থেকে ফাংশনটি কল করতে পারি

উপাদান 1: যে উপাদানটিকে আমরা ফাংশন বলছি

constructor( public bookmarkRoot: dataService ) { } 

onClick(){
     this.bookmarkRoot.callToggle.next( true );
}

dataservice.ts

import { Injectable } from '@angular/core';
@Injectable()
export class dataService {
     callToggle = new Subject();
}

উপাদান 2: উপাদান যা ফাংশন রয়েছে

constructor( public bookmarkRoot: dataService ) { 
  this.bookmarkRoot.callToggle.subscribe(( data ) => {
            this.closeDrawer();
        } )
} 

 closeDrawer() {
        console.log("this is called")
    }

কনস্ট্রাক্টরের অভ্যন্তরে এই কোডটি এড়াতে এটি একাধিকবার কল করতে পারেif ( this.bookmarkRoot.callToggle.observers.length === 0 ) { this.bookmarkRoot.callToggle.subscribe(( data ) => { this.closeDrawer(); } ) }
শফিক মুহাম্মদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.