组件通信问题,将@Output更换为@Input,无法生效

来源:2-7 【ngIf指令 组件的输入输出】组件的输入和输出属性

皮小西

2023-01-13

老师好,视频案例中,点击某个按钮,改变背景颜色,使用了@output的方式触发。
但是如果我将其改为@Input的方式,将父组件的handleTabSelected直接传给子组件。
实测可以触发此函数,但是背景颜色却没有变化。这是为什么呢?
src\app\components\scrollable-tab\scrollable-tab.component.html:

 <a href="#" [ngStyle]="{ color: i === selectedIndex ? titleActiveColor : titleColor }"
      (click)="handleTabSelected(menus[i])">

src\app\components\scrollable-tab\scrollable-tab.component.ts:

  @Input() handleTabSelected;

src\app\app.component.html:

<app-scrollable-tab [menus]="topMenus" [backgroundColor]="scrollableTabBgColor" titleColor="#fff"
  titleActiveColor="purple" indicatorColor="yellow" [handleTabSelected]="handleTabSelected">
  <div>Hello</div>
</app-scrollable-tab>

src\app\app.component.ts:

  scrollableTabBgColor = 'red';
  handleTabSelected(topMenu: TopMenu) {
    const colors = ['green', 'blue', 'black'];
    const idx = Math.floor(Math.random() * 3); // 在0~2中取1个color
    this.scrollableTabBgColor = colors[idx];
    console.log(topMenu, 222);
    console.log(this.scrollableTabBgColor,333);
  }

图片描述

写回答

1回答

接灰的电子产品

2023-01-13

请重新看一下视频吧,input 是属性,在引用这个组件时使用方括号来指明属性的值,output 是事件,引用组件时使用小括号来指定一个可以处理这个事件的函数。你这个里面handleTabSelected 是个函数,却要赋值给属性,这完全不对。

0
0

Angular 开发拼多多webapp 从基础到项目实战

高仿拼多多WebApp,带你在实战环境中学习Angular

1322 学习 · 451 问题

查看课程