TypeScript 循环依赖
TypeScript Circular Dependency
我有 2 个 类、Class A 和 ClassB。 Class B 扩展了 Class A 以便我可以访问 Class A 的实例和服务。 Class B 有一些我将在 Class A 中使用的功能.当我实现这个时,循环依赖错误出现了,现在我得到一个浏览器错误说:
"tslib.es6.js:25 Uncaught TypeError: Object prototype may only be an Object or null: undefined".
import { BuyerCardComponent} from './buyer-card.component'
export class BuyerCardExtended extends BuyerCardComponent{
func a(){
do_something;
}
}
import { BuyerCardExtended } from './buyer-card-extended'
class BuyerCardComponent {
constructor(private buyerCardExtended: BuyerCardExtended){}
func b(){
this.buyerCardExtended.a()
}
}
检测到循环依赖中的警告:
src/app/components/buyer/products/buyer-card/buyer-card.component.ts -> src/app/components/buyer/products/buyer-card/buyer-card-extended.ts -> src/app/components/buyer/products/buyer-card/buyer-card.component.ts
浏览器:
"tslib.es6.js:25 Uncaught TypeError: Object prototype may only be an Object or null: undefined"
这种情况背后的主要原因是这个顺序:当您执行 Class A
时,它会自动导入 Class B
。在 Class B
中,您导入 Class A
,它会再次自动导入 Class B
。这个序列一次又一次地发生,最终导致循环依赖。
第一个解决方案是创建另一个 Class 并将所有依赖项导入其中。或者如果你只是想在两者之间共享一些函数和变量 类,我建议你使用共享服务并在其中声明所有函数。然后,将该服务导入您的组件或 Classes。
如果您想从父 class 调用子 class 方法,请使用 @ViewChild 装饰器。
import { BuyerCardExtended } from './buyer-card-extended'
class BuyerCardComponent implements AfterViewInit {
@ViewChild(BuyerCardExtended) childCmp : BuyerCardExtended;
constructor(){}
ngAfterViewInit(){
func b(){
this.childCmp.a(); }
}
}
另请参阅此
我有 2 个 类、Class A 和 ClassB。 Class B 扩展了 Class A 以便我可以访问 Class A 的实例和服务。 Class B 有一些我将在 Class A 中使用的功能.当我实现这个时,循环依赖错误出现了,现在我得到一个浏览器错误说:
"tslib.es6.js:25 Uncaught TypeError: Object prototype may only be an Object or null: undefined".
import { BuyerCardComponent} from './buyer-card.component'
export class BuyerCardExtended extends BuyerCardComponent{
func a(){
do_something;
}
}
import { BuyerCardExtended } from './buyer-card-extended'
class BuyerCardComponent {
constructor(private buyerCardExtended: BuyerCardExtended){}
func b(){
this.buyerCardExtended.a()
}
}
检测到循环依赖中的警告: src/app/components/buyer/products/buyer-card/buyer-card.component.ts -> src/app/components/buyer/products/buyer-card/buyer-card-extended.ts -> src/app/components/buyer/products/buyer-card/buyer-card.component.ts
浏览器:
"tslib.es6.js:25 Uncaught TypeError: Object prototype may only be an Object or null: undefined"
这种情况背后的主要原因是这个顺序:当您执行 Class A
时,它会自动导入 Class B
。在 Class B
中,您导入 Class A
,它会再次自动导入 Class B
。这个序列一次又一次地发生,最终导致循环依赖。
第一个解决方案是创建另一个 Class 并将所有依赖项导入其中。或者如果你只是想在两者之间共享一些函数和变量 类,我建议你使用共享服务并在其中声明所有函数。然后,将该服务导入您的组件或 Classes。
如果您想从父 class 调用子 class 方法,请使用 @ViewChild 装饰器。
import { BuyerCardExtended } from './buyer-card-extended'
class BuyerCardComponent implements AfterViewInit {
@ViewChild(BuyerCardExtended) childCmp : BuyerCardExtended;
constructor(){}
ngAfterViewInit(){
func b(){
this.childCmp.a(); }
}
}
另请参阅此