angular - 在另一个组件中调用已经存在的组件的方法
问题描述
组件 1
import { Component } from '@angular/core';
@Component({
selector: 'app-component1',
template:
`
<button (click)="submit()"></button>
`
})
export class Component {
constructor() {
}
someMethod(): void {
}
}
组件 2
import { Component } from '@angular/core';
@Component({
selector: 'app-component2',
template:
`
<p>text</p>
`
})
export class Component2 {
constructor() {
}
}
我想从组件 2调用组件 1 someMethod()
组件 1和组件 2没有任何父/子关系。
有什么方法可以在组件 2中获取组件 1的瞬间
在java中是这样的
MyClass myClass = applicationContext.getBean("myClass");
在没有BehaviorSubject
and的情况下有任何可能的方法EventEmitter
吗?
解决方案
您可以通过包含它们的父模板将组件A转发到另一个组件B。没有可以查询的组件实例存储库。如果您不想使用模板来连接两者,那么您必须使用共享服务来代替。
app.component.html:
<component-a #refA></component-a>
<component-b [refA]="refA"></component-b>
@Component({...})
export class ComponentA {
public someMethod() { }
}
@Component({...})
export class ComponentB implement OnInit {
@Input() refA: ComponentA;
public ngOnInit() {
if(this.refA) {
this.refA.someMethod();
}
}
}
以上有缺点。
- 您可以在检查错误后触发此表达式已更改。
ComponentA
如果您在外部改变组件状态表单,则需要将视图标记为脏。
我不推荐上述方法,因为从视图外部改变另一个组件的内部状态是一种反模式。最好使用共享服务和可观察对象。
推荐阅读
- excel - Excel中的部分匹配
- hugo - Hugo - 从单个模板的上下文中访问列表模板的上下文中的 .Pages
- sublimetext3 - 保留反向“拆分为行”命令的选择
- gcc - 从头开始编译 GCC 时出错:Makefile:555: *** 缺少分隔符。停止
- intellij-idea - 如何在 IntelliJ 中现有的代码中添加 Aspose?
- excel - 索引匹配查找 - LAST 值
- javascript - 使用 jquery 获取 id 不起作用
- reactjs - 使用 Flowtype 覆盖 React-Redux Connect()
- r - 从renderText()输出的R Shiny分割文本行
- python - django 如何将自己模型的字段列表添加到我的模型中?