Javascript 角度+;Electron base应用程序不会刷新页面的某个部分
我正在开发一个Angular 9+Electron应用程序,它从文件系统中读取文件名(而不是内容),并以树状结构在面板上显示它们。我的角度部分在浏览器上运行得很好,但是当我尝试在Electron上下文中运行它时,面板不会显示树结构。要使其显示出来,唯一的方法是调整Electron应用程序窗口的大小或强制事件(单击按钮)。我的问题是,如何使它在数据到达后呈现树结构 当我在Angular中为Electron服务添加console.log时,来自Electron进程的数据显示在控制台上,Angular获取并处理数据。但当数据必须从app.component.ts文件传输到其子组件时,控制台将停止打印。控制台停止时发出以下警告: “安全警告:调用webFrame.executeJavaScript时未启用worldSafeExecuteJavaScript。这被认为是不安全的。默认情况下,worldSafeExecuteJavaScript将在Electron 12中启用。” 并停止打印任何其他内容 以下是我正在使用的代码: 在Javascript 角度+;Electron base应用程序不会刷新页面的某个部分,javascript,angular,typescript,electron,Javascript,Angular,Typescript,Electron,我正在开发一个Angular 9+Electron应用程序,它从文件系统中读取文件名(而不是内容),并以树状结构在面板上显示它们。我的角度部分在浏览器上运行得很好,但是当我尝试在Electron上下文中运行它时,面板不会显示树结构。要使其显示出来,唯一的方法是调整Electron应用程序窗口的大小或强制事件(单击按钮)。我的问题是,如何使它在数据到达后呈现树结构 当我在Angular中为Electron服务添加console.log时,来自Electron进程的数据显示在控制台上,Angular
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;
}
...