Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在通过另一个组件更新属性后,如何触发组件在Angular 2中渲染?ngZone.run()不工作_Angular - Fatal编程技术网

在通过另一个组件更新属性后,如何触发组件在Angular 2中渲染?ngZone.run()不工作

在通过另一个组件更新属性后,如何触发组件在Angular 2中渲染?ngZone.run()不工作,angular,Angular,我在获取要重新渲染的组件时遇到问题。我有一个面包屑组件,我希望其他组件能够通过调用方法来更新它。例如,假设我有一个ViewContact组件,我希望该组件将面包屑中的活动页面设置为联系人的名称 面包屑组件正在注入ViewContact组件&我已经为面包屑设置了提供程序。ViewContact组件正在调用面包屑组件上的一个方法,面包屑组件反过来调用ngZone.run(),正如我所读到的,应该会触发组件重新渲染。但事实并非如此 我在这里创建了一个简单的Plunker: 我想做的事情是可以通过注射实

我在获取要重新渲染的组件时遇到问题。我有一个面包屑组件,我希望其他组件能够通过调用方法来更新它。例如,假设我有一个ViewContact组件,我希望该组件将面包屑中的活动页面设置为联系人的名称

面包屑组件正在注入ViewContact组件&我已经为面包屑设置了提供程序。ViewContact组件正在调用面包屑组件上的一个方法,面包屑组件反过来调用
ngZone.run()
,正如我所读到的,应该会触发组件重新渲染。但事实并非如此

我在这里创建了一个简单的Plunker:

我想做的事情是可以通过注射实现的,还是有更好的方法


谢谢……

您可以使用
EventEmitter
和模板变量在兄弟姐妹之间进行通信

export class OtherComponent implements OnInit {
  @Output() notifyOther:EventEmitter = new EventEmitter();

  ...

  updateBreadcrumb() {
    this.notifyOther.emit("changed " + (this.count++));
    //this._breadcrumb.setProperty("changed " + (this.count++));
  }
}


您可以使用
EventEmitter
和模板变量在同级之间进行通信

export class OtherComponent implements OnInit {
  @Output() notifyOther:EventEmitter = new EventEmitter();

  ...

  updateBreadcrumb() {
    this.notifyOther.emit("changed " + (this.count++));
    //this._breadcrumb.setProperty("changed " + (this.count++));
  }
}


在您的情况下,您不能将
面包屑
组件注入到
其他组件中,因为它们没有父/子关系。即使将第一个组件添加到提供程序中,这也不起作用:

providers: [Breadcrumb],
要么选择甘特提供的方法,要么选择共享服务:

import {Subject} from 'rxjs/Rx';

export class SharedService {
  property:string;
  property$:Subject<string> = new Subject();

  setProperty(newValue:string) {
    this.property = newValue;
    this.property$.next(this.property);
  }
}
请参阅以下链接:

关于组件交互的此文档可能会引起您的兴趣:


在您的情况下,您不能将
面包屑
组件注入到
其他组件
中,因为它们没有父/子关系。即使将第一个组件添加到提供程序中,这也不起作用:

providers: [Breadcrumb],
要么选择甘特提供的方法,要么选择共享服务:

import {Subject} from 'rxjs/Rx';

export class SharedService {
  property:string;
  property$:Subject<string> = new Subject();

  setProperty(newValue:string) {
    this.property = newValue;
    this.property$.next(this.property);
  }
}
请参阅以下链接:

关于组件交互的此文档可能会引起您的兴趣:


这可能适用于简单的场景,但在我的应用程序中,我有一个包含breadcrumb组件的组件&RouterOutlet<代码>
该组件然后加载其他组件,如ViewContact组件。breadcrumb可以根据路由名称(
router.currentInstruction.component.routeName
)呈现项目,然后Thierries答案可能就是您要寻找的。这在简单的场景中可能有效,但在我的应用程序中,我有一个包含breadcrumb组件的组件&RouterOutlet<代码>
该组件然后加载其他组件,如ViewContact组件。面包屑可以根据路由名称(
router.currentInstruction.component.routeName
)呈现项目,然后Thierries的答案可能就是您想要的。非常感谢您的快速帮助!!我现在在我正在开发的应用程序中使用它。我一定会读那篇文章的。非常感谢你的快速帮助!!我现在在我正在开发的应用程序中使用它。我一定会读那篇文章的。