我认为您不太了解我们为什么需要导入。本质上,模块允许我们将代码拆分为不同的文件。假设您在一个文件/模块中有以下内容:
class AComp {}
class BComp {
constructor() {
// creates new instance of AComp
new AComp();
}
}
现在,您可以在此处看到 BComp 使用 reference 到 AComp 类来创建该类的实例。然后我们决定将这些类拆分成不同的模块/类:
----------------------------- a-comp.js -----------------------------
class AComp {}
----------------------------- b-comp.js -----------------------------
class BComp {
constructor() {
// creates new instance of AComp
new AComp();
}
}
如果你现在运行b-comp.js,JavaScript 引擎会抛出一个错误,因为它会说b-comp.js 文件/模块中没有AComp 类。所以我们需要告诉 JS 引擎去哪里寻找AComp。我们通过导入来做到这一点:
import { AComp } from 'a-comp';
class BComp {
constructor() {
// creates new instance of AComp
new AComp();
}
}
现在一切都会好起来的。
什么时候需要导入组件?什么时候不需要?
如您所见,我们必须使用导入,因为我们在b-comp.js 文件/模块中使用 AComp 类引用。如果我们不在BComp 文件/模块中使用AComp 类引用,则无需导入AComp 类。
...为什么我们不将子组件导入父组件
从教程中可以看出,AppComponent 类都没有直接在文件/模块代码中使用HeroDetailComponent 类引用,HeroDetailComponent 也没有使用AppComponent 类引用。所以不需要导入它们。
如果我们不这样做,Angular 怎么知道它是如何工作的
([hero]="selectedHero")? 'hero' 是子组件的属性,
'selectedHero' 是父组件的属性吗?
因为可以从父 AppComponent 模板中提供的信息推断出这一点,Angular 编译器使用此语法 [hero]="selectedHero" 来获取所有必需的信息。