我正在关注角度官方网站(https://angular.io/tutorial/toh-pt3)的教程 .
-
当我学习父组件( AppComponent )如何与子组件( HeroDetailComponent )进行通信时,由于我们在父组件的模板
<hero-detail [hero]="selectedHero"></hero-detail>
中添加了它,我看起来父组件与子组件对话,为什么我们不导入子组件进入父组件(import { HeroDetailComponent } from './hero-detail.component';
)并将父组件导入子组件(import { AppComponent } from './app.component';
)? -
如果我们不这样做,角度怎么知道这是如何工作的(
[hero]="selectedHero"
)? 'hero' 是子组件的属性, 'selectedHero' 是父组件的属性? -
我们什么时候需要导入组件?什么时候我们不需要?
1 回答
我想你不太明白为什么我们需要进口 . 从本质上讲,模块允许我们将代码分成不同的文件 . 假设您在一个文件/模块中具有以下内容:
现在,您可以看到BComp使用 reference 到AComp类来创建该类的实例 . 然后我们决定将这些类拆分为不同的模块/类:
如果你现在运行
b-comp.js
,JavaScript引擎将抛出一个错误,因为它会说b-comp.js
文件/模块中没有AComp
类 . 所以我们需要告诉JS引擎在哪里寻找AComp
. 我们通过导入来做到这一点:现在一切都会好起来的 .
正如您在
b-comp.js
文件/模块中看到的那样 had to use import because we useAComp
类引用 . 如果我们在BComp
文件/模块中没有使用AComp
类引用,则不需要导入AComp
类 .正如您在本教程中看到的那样,
AppComponent
类在文件/模块代码中都不直接使用HeroDetailComponent
类引用,HeroDetailComponent
也不使用AppComponent
类引用 . 所以没有必要导入它们 .因为可以从父
AppComponent
模板中提供的信息推断出这一点,Angular编译器使用此语法[hero]="selectedHero"
来获取所有必需的信息 .