搜尋

首頁  >  問答  >  主體

javascript - Electron使用Anguar編寫渲染線程的問題

各位好:

我想在electron的渲染線程中使用angular框架,但是不想把程式碼使用webpack打包,因為electron的渲染線程中也同樣支援commonJS語法,所以我想只把Typescript轉換為commonJS不打包,然後直接在index.html中require對應的文件。下面是我的實作過程

首先我創建了3個ts檔

  1. app.component.ts

    import { Component } from '@angular/core'
    @Component({
      selector: 'my-app' ,
      template: '<input type="text" [(ngModel)]="name" /><h1>Hello {{name}}</h1>'
    })
    export class AppComponent { name = 'Aungtcs' }
  2. app.module.ts

    import { NgModule } from '@angular/core'
    import { FormsModule } from '@angular/forms'
    import { BrowserModule } from '@angular/platform-browser'
    import { AppComponent } from './app.component'
    @NgModule ({
      imports: [
        FormsModule ,
        BrowserModule
      ] ,
      declarations: [
        AppComponent
      ] ,
      bootstrap: [
        AppComponent
      ] ,
      exports: [
        AppComponent
      ]
    })
    export class AppModel {  }
  3. main.ts

    import 'core-js/es7'
    import 'zone.js'
    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
    import { AppModel } from './app/app.module'
    platformBrowserDynamic().bootstrapModule(AppModel)

然後使用tsc編譯這三個檔案

tsc ./main.ts ./app/app.component.ts ./app/app.module.ts

現在產生了對應的js文件,目錄結構如下:

接著在index.htmlrequire('./main')

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <my-app>ok...</my-app>
</body>
<script type="text/javascript">
  require('./main')
</script>
</html>

啟動electron程式

#到目前為止程式看起來都是正常的,也符合我的目的,但是當我更改輸入框裡面的內容的時候,問題出現了,下面h1標籤裡面的 {{name}}表達式並沒有隨著輸入框裡面的值而變化,就是說資料綁定沒有效果。

接下來...

接下來為了探索問題原因,我把之前tsc產生的3個js檔案使用webpack進行了打包

webpack ./main.js main.out.js

index.html中的require語句換成require('./main.out'),再次執行程式

#現在再修改input裡面的內容,資料綁定生效了! ! !

有誰知道原因麼?知道的話請告訴我,萬分感謝! ! !

某草草某草草2720 天前800

全部回覆(2)我來回復

  • 欧阳克

    欧阳克2017-06-14 10:55:29

    把main.ts裡的import 'zone.js'改成import 'zone.js/dist/zone.js'
    原因的話,你看看zone.js的package.json應該就清楚了

    回覆
    0
  • 阿神

    阿神2017-06-14 10:55:29

    我對electron不太熟, 但你的問題我覺得應該是在import的問題。

    首先webpack的工作原理就是把所有的js打包起來,比如你引用node_modules裡面的@angular/core, 那webpack知道會去node_modules裡面去找到他並打包到指定的文件夾裡面去(比如你的app資料夾裡面),所以使用webpack後引用是正常的。 那問題就在這裡了, electron對於非./開頭的路徑會去node_modules找到它嗎?

    回覆
    0
  • 取消回覆