我们可以通过以下三种方式来实现:

  1. 传递一个组件的引用给另一个组件
  2. 通过子组件发送EventEmitter和父组件通信
  3. 通过serive通信

1. 传递一个组件的引用给另一个组件

Demo1 模板引用变量

模板引用变量通常用来引用模板中的某个 DOM 元素,它还可以引用 Angular 组件或指令或Web Component。 
使用井号 (#) 来声明引用变量。 #phone 的意思就是声明一个名叫 phone 的变量来引用 元素

这种方式适合组件间有依赖关系。 app component

<app-side-bar-toggle [sideBar]="sideBar"></app-side-bar-toggle>
<app-side-bar #sideBar></app-side-bar>

app.component.html

@Component({
selector: 'app-side-bar-toggle',
templateUrl: './side-bar-toggle.component.html',
styleUrls: ['./side-bar-toggle.component.css']
})
export class SideBarToggleComponent { @Input() sideBar: SideBarComponent; @HostListener('click')
click() {
this.sideBar.toggle();
}
}

side-bar-toggle.component.ts

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
sideBarIsOpened = false; toggleSideBar(shouldOpen: boolean) {
this.sideBarIsOpened = !this.sideBarIsOpened;
}
}

2. 通过子组件发送EventEmitter和父组件通信

Demo2 这种方式利用事件传播,需要在子组件中写 app.component.html

<app-side-bar-toggle (toggle)="toggleSideBar()"></app-side-bar-toggle>
<app-side-bar [isOpen]="sideBarIsOpened"></app-side-bar>

app.component.ts

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
sideBarIsOpened = false; toggleSideBar(shouldOpen: boolean) {
this.sideBarIsOpened = !this.sideBarIsOpened;
}
}

side-bar-toggle.component.ts

@Component({
selector: 'app-side-bar-toggle',
templateUrl: './side-bar-toggle.component.html',
styleUrls: ['./side-bar-toggle.component.css']
})
export class SideBarToggleComponent { @Output() toggle: EventEmitter<null> = new EventEmitter(); @HostListener('click')
click() {
this.toggle.emit();
}
}

side-bar.component.ts

@Component({
selector: 'app-side-bar',
templateUrl: './side-bar.component.html',
styleUrls: ['./side-bar.component.css']
})
export class SideBarComponent { @HostBinding('class.is-open') @Input()
isOpen = false;
}

3. 通过service进行通信

Demo3 这里需要新建side-bar.service,我们把toggle方法写到service文件中, 然后将service注入到side-bar-toggle.component和side-bar-toggle.component,前者调用toggle方法,发送事件流,后者订阅事件

app.component.html

<app-side-bar-toggle></app-side-bar-toggle>
<app-side-bar></app-side-bar>

side-bar-toggle.component.ts

@Component({
selector: 'app-side-bar-toggle',
templateUrl: './side-bar-toggle.component.html',
styleUrls: ['./side-bar-toggle.component.css']
})
export class SideBarToggleComponent { constructor(
private sideBarService: SideBarService
) { } @HostListener('click')
click() {
this.sideBarService.toggle();
}
}

side-bar.component.ts

@Component({
selector: 'app-side-bar',
templateUrl: './side-bar.component.html',
styleUrls: ['./side-bar.component.css']
})
export class SideBarComponent { @HostBinding('class.is-open')
isOpen = false; constructor(
private sideBarService: SideBarService
) { } ngOnInit() {
this.sideBarService.change.subscribe(isOpen => {
this.isOpen = isOpen;
});
}
}

side-bar.service.ts

@Injectable()
export class SideBarService { isOpen = false; @Output() change: EventEmitter<boolean> = new EventEmitter(); toggle() {
this.isOpen = !this.isOpen;
this.change.emit(this.isOpen);
}
}
												

最新文章

  1. iis 7.5 0x80004005 静态文件 html、js、css 500错误
  2. 《高性能MySql》阅读笔记
  3. Construct a tree from Inorder and Level order traversals
  4. javascript中字符串格式json如何转化成json对象
  5. HDU 4118 Holiday&#39;s Accommodation
  6. 原生javascript-常用的函数
  7. ubuntu 基本操作(1)
  8. Java语言基础(一) 标识符
  9. 登录MD5加盐处理
  10. javascript中的基本数据类型
  11. UBUNTU 下设置全局 path变量
  12. UWP开发小记
  13. Candy Bags
  14. Hibernate第十一篇【配置C3P0数据库连接池、线程Session】
  15. 【转载】CSS3 Transitions, Transforms和Animation使用简介与应用展示
  16. Spring Boot 注解详解
  17. 关于对ProgressBar定义模板的一些总结
  18. bzoj1477: 青蛙的约会(exgcd)
  19. luogu P4082 [USACO17DEC]Push a Box
  20. 正则表达式在JS中的使用

热门文章

  1. RocketMQ源码详解 | Broker篇 &#183; 其二:文件系统
  2. Centos 系统常用编译环境
  3. MongoDB 集群 config server 查询超时导致 mongos 集群写入失败
  4. JVM-内存区域与OOM
  5. jQuery淡入淡出效果
  6. css--元素居中常用方法总结
  7. Python 操作 Redis 发布订阅
  8. Django笔记&教程 4-3 模型(models)主键外键
  9. 菜鸡的Java笔记
  10. &lt;C#任务导引教程&gt;练习七