前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >angular 在指令里把组件当服务,并订阅组件的事件

angular 在指令里把组件当服务,并订阅组件的事件

原创
作者头像
treeNewBe
修改2020-06-16 14:22:55
1.2K0
修改2020-06-16 14:22:55
举报
代码语言:typescript
复制
- Module
import { ExampleDirective , TabBodyComponent} from './example.component';
@NgModule({
  declarations: [ExampleDirective , TabBodyComponent],  
  providers: [ TabBodyComponent ]
})
export class ExampleModule { }
+ AppComponent
@Component({
  selector: 'app-component',
  template: `
    <tab-body example></tab-body>
  `
})
export class AppComponent{}
* ExampleComponent ,TabBody 在一个文件里,下面注入时用 forwardRef
import { Subscription } from 'rxjs';
@Directive({
 selector: 'example, [example]'  
})
export class ExampleDirective implements OnInit, OnDestroy {
  constructor(@Inject(forwardRef(() => TabBody)) private _host: TabBody) {}
  private _centeringSub = Subscription.EMPTY;
  ngOnInit(): void {   
    this._centeringSub = this._host._beforeCentering
      .pipe()
      .subscribe((isCentering: boolean) => {
       console.log(isCentering) // _beforeCentering.emit(true) 传的值 true;
      });
  }
  ngOnDestroy() {
    this._centeringSub.unsubscribe();
  }
}
* TabBodyComponent
@Component({
  selector: 'tab-body',
  template: `
    <span (click)="_beforeCentering.emit(true)">点击触发事件,指令subscribe</span>
  `
})
export class TabBodyComponent{
  @Output() readonly _beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();
}
- ...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档