node.js - Angular 4 : Node is throwing a reference error: navigator is not defined when I add <md-sidenav>

标签 node.js angular material-design

我正在使用 Angular 4 和 Angular/material。 MdToolbar 工作正常,但是当我将 MdSidenav 添加到我的应用程序模板时,就像文档中指出的那样,Node 给了我一个 ReferenceError: navigator is not Defined。有人经历过类似的事情吗?

src/app.component.html

<md-sidenav-container>

<layout-header>
    <nav-bar></nav-bar>
    <!-- TODO: Create nav component -->
    <a routerLink="/">Home</a>
    <a routerLink="/about">About</a>
    <a routerLink="/lazy">Lazy</a>
    <a routerLink="/lazy2">Lazy 2</a>
    <a routerLink="/user-profile">User Profile</a>
    <a routerLink="/test-rest">Test Rest</a>
    <a routerLink="/test-route-params">Test Route Params</a>
</layout-header>

<md-sidenav #sidenav class="sidenav">
    <ul>
        <li>Search</li>
        <li>Start a Group</li>
        <li>App Settings</li>
        <li>About</li>
        <li>Help</li>
        <li>Logout</li>
    </ul>
</md-sidenav>

<!--primary router outlet: a dynamic component that the router uses to 
display-->
<router-outlet></router-outlet>

<!-- TODO: Issue with event not emitting via onShown/onHidden -->
<!-- Ref: https://github.com/valor-software/ngx-bootstrap/issues/1886 -->
<app-dialog (dynamicComponent)="onDialogLoad($event)" (onShown)="test()" 
(onHidden)="test2()"></app-dialog>

<!--TODO: example; Delete-->
<button (click)="create()">Create</button>
<simple-notifications [options]="options"></simple-notifications>

<layout-footer></layout-footer>
</md-sidenav-container>

src/app.module.ts

@NgModule({
imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    HttpModule,
    TransferHttpModule,
    NgReduxModule,
    MdToolbarModule,
    MdSidenavModule,
    MdIconModule,
    MdCardModule,
    MdInputModule,
    MdButtonModule,
    DialogModule.forRoot([LoginForm]),
    SimpleNotificationsModule.forRoot(), // TODO: remove; testing only
    RouterModule.forRoot(AppRoutes)
],
providers: [ AuthGuard, DialogService ],
declarations: [
    AppComponent,
    HomeView,
    AboutComponent,
    HeaderComponent,
    FooterComponent,
    NavBarComponent,
    LoginForm,
    SideNavComponent
],
exports: [ AppComponent ],
bootstrap : [ AppComponent ]

}) 导出类 AppModule {}

NodeJS 错误

错误{ReferenceError:导航器未定义 在新平台(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/material/bundles/material.umd.js:3396:36) 在 ServerAppModuleInjector.get (ng:///ServerAppModule/module.ngfactory.js:177:61) 在 ServerAppModuleInjector.get (ng:///ServerAppModule/module.ngfactory.js:182:120) 在 ServerAppModuleInjector.get (ng:///ServerAppModule/module.ngfactory.js:187:108) 在 ServerAppModuleInjector.getInternal (ng:///ServerAppModule/module.ngfactory.js:477:56) 在 ServerAppModuleInjector.NgModuleInjector.get (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:3563:44) 在resolveDep(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:10931:45) 在createClass(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:10795:147) 在createDirectiveInstance(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:10628:37) 在createViewNodes(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:11978:49) 在 callViewAction (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:12348:13) 在 execComponentViewsAction (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:12287:13) 在createViewNodes(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:12005:5) 在createRootView(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:11883:5) 在 Object.createProdRootView [作为 createRootView] (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:12461:12) 在 ComponentFactory_.create (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:9819:46) 在 ComponentFactoryBoundToModule.create (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:3434:29) 在ApplicationRef_.bootstrap(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:5016:57) 在/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:4803:79 at Array.forEach( native ) 在 PlatformRef_._moduleDoBootstrap (/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:4803:42) 在/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:4765:27 在 ZoneDelegate.invoke (/Users/lsorensen/code/OneUnionV1/node_modules/zone.js/dist/zone-node.js:365:26) 在Object.onInvoke(/Users/lsorensen/code/OneUnionV1/node_modules/@angular/core/bundles/core.umd.js:4132:37) 在 ZoneDelegate.invoke (/Users/lsorensen/code/OneUnionV1/node_modules/zone.js/dist/zone-node.js:364:32) 在 Zone.run (/Users/lsorensen/code/OneUnionV1/node_modules/zone.js/dist/zone-node.js:125:43) 在/Users/lsorensen/code/OneUnionV1/node_modules/zone.js/dist/zone-node.js:758:57

最佳答案

仅从 NgModule 导出 MdSidenavModule 可能适合您的情况。

我很幸运将 Material 模块(跨多个组件使用的模块)分解为自己的模块,这稍微清理了 app.module 。然后在 app.module 中进行导入和导出,如下所示:

Material .module.ts

import { MdSidenavModule } from '@angular/material';
. 
.
const MATERIAL_MODULES = [
    MdSidenavModule,
    .
    .
];
@NgModule({
    imports: MATERIAL_MODULES,
    exports: MATERIAL_MODULES
})

export class MaterialModule { }

应用程序模块

import { MaterialModule } from '../material.module';
.
.
@NgModule({
    imports: [
        MaterialModule,
        .
        .
    ],
    exports:   [ MaterialModule ],
})

关于node.js - Angular 4 : Node is throwing a reference error: navigator is not defined when I add <md-sidenav>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857699/

相关文章:

javascript - Node.js module.exports 的用途是什么,你如何使用它?

javascript - 使用 API 和 Mongoose 的 AngularJS SPA

angular - HTTP 获取 404 未找到 URL : null

angular - 是否可以从本地服务结构集群内部使用 UseProxyToSpaDevelopmentServer?

javascript - 递归模板 Angular2

Lollipop 上的 Android 警报对话框样式不正确

python - 如何使用 Node.js 和 Dialogflow

java - Android Design Navigation Drawer - 如何在导航 xml 中添加开关?

angular - 如何在 Angular 4 的 Material Design 表格中添加复选框

node.js - 更新 npm 包的自述文件时出现版本问题?