Javascript 角度+;Electron base应用程序不会刷新页面的某个部分

Javascript 角度+;Electron base应用程序不会刷新页面的某个部分,javascript,angular,typescript,electron,Javascript,Angular,Typescript,Electron,我正在开发一个Angular 9+Electron应用程序,它从文件系统中读取文件名(而不是内容),并以树状结构在面板上显示它们。我的角度部分在浏览器上运行得很好,但是当我尝试在Electron上下文中运行它时,面板不会显示树结构。要使其显示出来,唯一的方法是调整Electron应用程序窗口的大小或强制事件(单击按钮)。我的问题是,如何使它在数据到达后呈现树结构 当我在Angular中为Electron服务添加console.log时,来自Electron进程的数据显示在控制台上,Angular

我正在开发一个Angular 9+Electron应用程序,它从文件系统中读取文件名(而不是内容),并以树状结构在面板上显示它们。我的角度部分在浏览器上运行得很好,但是当我尝试在Electron上下文中运行它时,面板不会显示树结构。要使其显示出来,唯一的方法是调整Electron应用程序窗口的大小或强制事件(单击按钮)。我的问题是,如何使它在数据到达后呈现树结构

当我在Angular中为Electron服务添加console.log时,来自Electron进程的数据显示在控制台上,Angular获取并处理数据。但当数据必须从app.component.ts文件传输到其子组件时,控制台将停止打印。控制台停止时发出以下警告:

“安全警告:调用webFrame.executeJavaScript时未启用worldSafeExecuteJavaScript。这被认为是不安全的。默认情况下,worldSafeExecuteJavaScript将在Electron 12中启用。”

并停止打印任何其他内容

以下是我正在使用的代码:

index.html中

...
  <meta http-equiv="Content-Security-Policy" content="script-src 'self'">
...
在app.component.ts中:

...
NOTES_DATA: NotesNodeImp[]=[];

  constructor(private electron_service: ElectronServiceFile,
              private select_service: SelectedNodeService){
    this.electron_service.loadFiles();
    
  }
...
  ngOnInit(){
    this.electron_service.notes.subscribe( notes =>{
      console.log("app.component notes ", notes);
      notes.forEach( note => {
        let name_parts = note.split('-'); 
        let notesObj =new NotesNodeImp(Number.parseInt(name_parts[0]));
        notesObj.name = note;
        notesObj.label = name_parts[1];
        this.NOTES_DATA.push(notesObj);
      });
      this.NOTES_DATA = Object.assign([], this.NOTES_DATA);
    })
...
在app.component.html中

<div class="app-nav">
  <app-navigation [data_saved]="NOTES_DATA"></app-navigation>
</div>
这是控制台:


该图显示,首先调用loadFiles方法,然后app.component.ts向其子级(navigation.component.ts)发送一个空数组。但是,当数据确实从主进程到达时,app.component.ts会接收数据并对其进行处理,但似乎不会将其发送到其子组件。

问题在于,当数据到达组件时,浏览器引擎没有发送更改事件。Angular有几种处理方法。我选择了 this.zone.run(()=>this.NOTES_数据);
将数据发送到需要知道的组件。有关如何使用分区的说明:

问题在于,当数据到达组件时,浏览器引擎没有发送更改事件。Angular有几种处理方法。我选择了 this.zone.run(()=>this.NOTES_数据); 将数据发送到需要知道的组件。有关如何使用分区的说明:

<div class="app-nav">
  <app-navigation [data_saved]="NOTES_DATA"></app-navigation>
</div>
...  
constructor() {
    if ((<any>window).require) {
      try {
        this.ipc = (<any>window).require('electron').ipcRenderer;
      } catch (e) {
        throw e;
      }
    } else {
      console.warn('App not running inside Electron!');
    }

    this.ipc.on('getNotesResponse', (event, notes) => {
      this.notes.next(notes);
      console.log("available notes ", notes);
    });
    
  }

  loadFiles(){
    console.log('load files: ');
    this.ipc.send('loadNotes');
  }
...
  ...
  data: NotesNodeImp[]=[];

  @Input('data_saved') 
  set data_saved (d: NotesNodeImp[]){
    console.log("data1 " , d)
    this.data = d;
  }
  ...