在Angular2

时间:2016-07-29 00:44:29

标签: javascript angular components modularity

我正在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的刷新方法。

1 个答案:

答案 0 :(得分:0)

就像@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() {
       ...
   }
}