【问题标题】:.Net Core Angular 4 - Duplicate app component on bundle rebuilding.Net Core Angular 4 - 捆绑重建时重复的应用程序组件
【发布时间】:2018-05-01 03:56:25
【问题描述】:

我的项目正在使用 Visual Studio .Net-Core AngularJS 模板(即使用 app.module.shared.ts,app.module.browser.ts,app.module.server.ts 文件)

我遇到了一个奇怪的问题,即每当我进行更改时,都会将新的 <app> 元素添加到我的 DOM 中,而旧的 <app> 元素并没有被删除。 如果我刷新页面,一切都会恢复正常。

【问题讨论】:

  • 这应该被标记为Angular 而不是AngularJS(查看您的答案)。
  • 是的,谢谢。更新

标签: angular webpack .net-core angular-animations


【解决方案1】:

经过大量搜索,原来是因为我的app.module.browser.ts 文件中有这个

imports: [
    BrowserModule,
    BrowserAnimationsModule,
    AppModuleShared
],

删除 BrowserAnimationsModule 行后,重复问题就停止了。

所以导入部分变为:

imports: [
    BrowserModule,
    AppModuleShared
],

我不知道这是 webpack 问题、角度问题,还是 MS 将 app.module 拆分为多个文件的方式的问题……但如果你遇到这个问题,那就是导致它的原因!

对于那些感兴趣的人来说很容易复制,只需开始一个新的模板项目并添加该行。

更新:将BrowserAnimationsModule 导入添加到app.module.shared.ts 文件也有同样的问题,NoopAnimationsModule 也是如此

更新 2: 我刚刚发现这个 GIT 问题有一个适当的解决方法来删除旧的<app> https://github.com/aspnet/JavaScriptServices/issues/1165

【讨论】:

    【解决方案2】:

    我的解决方法是更新boot.browser.ts 文件以包含oldRootElem!.remove();

    import 'reflect-metadata';
    import 'zone.js';
    import 'bootstrap';
    import { enableProdMode } from '@angular/core';
    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    import { AppModule } from './app/app.browser.module';
    
    if (module.hot) {
        module.hot.accept();
        module.hot.dispose(() => {
            // Before restarting the app, we create a new root element and dispose the old one
            const oldRootElem = document.querySelector('app');
            const newRootElem = document.createElement('app');
            oldRootElem!.parentNode!.insertBefore(newRootElem, oldRootElem);
            oldRootElem!.remove();
            modulePromise.then(appModule => appModule.destroy());
        });
    } else {
        enableProdMode();
    }
    
    // Note: @ng-tools/webpack looks for the following expression when performing production
    // builds. Don't change how this line looks, otherwise you may break tree-shaking.
    const modulePromise = platformBrowserDynamic().bootstrapModule(AppModule);
    

    这样你仍然可以包含BrowserAnimationsModule(参见@James的回答)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2020-05-12
      • 2013-10-27
      • 2020-02-12
      相关资源
      最近更新 更多