繁体   English   中英

在Angular2中的两个组件之间进行通信

[英]Communicating between two Components in Angular2

我正在Angular2中构建一个应用程序。 我有两个组件,其中第二个组件加载在第一个组件的路由器出口中。

Component 1
@Component({
    selector: 'component1',
    templateUrl: '
     <div>
     ...
     ...
     ...
     </div>
     <router-outlet></router-outlet>
    '
})
@RouteConfig([
    { path: '/component2', component: Component2, name: 'Component2', useAsDefault: true }])

export class Component1{
     ...
     ...
     ...
     refresh(){
        ...
        ...
     }
}

现在是Component2。

@Component({
        selector: 'component2',
        templateUrl: '
         <div>
         ...
         ...
         ...
         </div>
        '
    })

export class Component2{
     ...
     ...
     ...
     thisFunctionShouldRefreshComponent1(){
        //call Component1's refresh here
     }

有人可以告诉我如何从Component2调用Component1的refresh方法。

就像@Jiang YD所说,您需要一种服务来在组件之间进行通信。 您必须小心在哪里注册服务提供商。 您可以在应用程序的根目录或顶级组件中执行此操作。 这样两个组件都具有相同的服务实例。

这是一个使用observable的简单示例:

// The service
@Injectable()
export class SomeService {
    refresh: Subject<boolean> = new BehaviorSubject<boolean>(false);

    refresh() { this.refresh.next(true) }
}

// Component 1
@Component({
    selector: 'c1',
    // Register the provider here for example
    providers: [SomeService]
    ...
})
export class Component1 {
   constructor(
       private _ss: SomeService
   ) {}

   refresh() {
      this._ss.refresh()
   }
}

// Component 2
@Component({
    selector: 'c2',
    ...
})
export class Component2 {
   constructor(
       private _ss: SomeService
   ) { 
       this._ss.refresh.subscribe(a => {
           if (a) this.refresh();
       })
   }  

   refresh() {
       ...
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM