标签: angular-universal

在角度通用中使用isBrowser函数时出错

我正在尝试在角度通用中使用isBrowser函数,但是当我构建时我仍然遇到相同的错误.我确实安装了angular-universal的npm包

npm i angular2-universal --save

'ng build -prod -aot'

 ERROR in Illegal state: symbol without members expected, but got {"filePath":"C:/dir/universal/website/node_modules/@angular/platform-browser/platform-browser.d.ts","name":"__platform_browser_private__","members":["BROWSER_SANITIZATION_PROVIDERS"]}.

    ERROR in ./src/main.ts
    Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory' in 'C:/dir/universal/website\src'
     @ ./src/main.ts 4:0-74
     @ multi ./src/main.ts
Run Code Online (Sandbox Code Playgroud)

这是我的app.module.ts:

//modules
import { HomeModule } from './home/home.module';
import { IntakeFormulierModule } from './intake-formulier/intake-formulier.module';
import { BrowserModule } from '@angular/platform-browser';
import { UniversalModule } from 'angular2-universal/browser';

import { NgModule } from '@angular/core';

//routing
import { routing } from "./app.routing";

//pages
import { …
Run Code Online (Sandbox Code Playgroud)

angular-universal

2
推荐指数
1
解决办法
2568
查看次数

如何在 Angular 中获取完整的 url?

我的应用程序利用了 Angular Universal,我想url在 Angular 组件中获取当前的完整路径。我想我必须window在可能需要注入窗口的地方使用该对象,或者更好的选择是简单地检查它是否在浏览器中。是否有使用 Angular 的 API 的更清洁的解决方案?

  url: string;

  constructor(private router: Router) { }

  ngOnInit() {
    this.router.events.subscribe((val) => {
      this.url = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;
    });
  }
Run Code Online (Sandbox Code Playgroud)

编辑:我要问的问题是如何以url符合 Angular Universal 的方式获得完整

angular-universal angular

2
推荐指数
1
解决办法
1610
查看次数

在 Angular Universal 中使用 lodash-es 的正确方法是什么?

当我将导入从lodash替换为lodash-es时,Angular Universal 服务器会中断。但是当我跑步时ng serve,一切都很好。我想使用 lodash-es,这样我就可以在我的 Angular SPA 中挑选 lodash 函数并缩小包的大小。

我采取的步骤: npm 卸载了lodash, npm 安装了lodash-es,并像这样替换了我的导入:

从: import { find as _find } from "lodash";

要:import { find as _find } from "lodash-es";

这是我收到的服务器错误:

/usr/src/app/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3) …
Run Code Online (Sandbox Code Playgroud)

lodash angular-universal angular

2
推荐指数
1
解决办法
2730
查看次数

angular 通用应用性能,APP_BOOTSTRAP_LISTENER,闪烁

Angular 4.4.6
Angular CLI 1.3.2
Node 6.x.x
NPM 3.10.10
Webpack 3.4.1
Run Code Online (Sandbox Code Playgroud)

在 Angular Universal 应用程序中,当服务器视图切换到客户端视图时,屏幕会出现闪烁,因为在服务器端渲染中调用的所有 API 也在客户端渲染中调用,因为存在闪烁。

为了消除这种闪烁,我实现了 Angular Universal Transfer Module,它private _map = new Map<string, any>();在服务器端渲染时将数据存储在地图缓存 ( ) 中,并将其传输到客户端,因此客户端不需要再次调用 api 并立即从缓存中获取数据。

转移是通过该提供商进行的。

{
    provide: APP_BOOTSTRAP_LISTENER,
    useFactory: onBootstrap,
    multi: true,
    deps: [
        ApplicationRef,
        TransferState
    ]
}

export function onBootstrap(appRef: ApplicationRef, transferState: TransferState) {
    return () => {
        appRef.isStable
        .filter(stable => stable)
        .first()
        .subscribe(() => {
            transferState.inject();
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

这样闪烁消失了,但应用程序性能下降了,在对应用程序进行负载测试时,闪烁的结果比非闪烁的应用程序更快,这是为什么?

可能是因为在负载测试或机器人访问网站的情况下,没有浏览器所以缓存永远不会被清除,它只是用缓存内存填充服务器并且服务器变慢,有什么解决方案可以解决这个问题,要么创建机器人和真实用户的不同实例,通过在 nginx 级别识别请求,oe 还有一些我在 angular Universal 中缺少的东西。

javascript nginx server-side-rendering angular-universal angular

2
推荐指数
1
解决办法
2244
查看次数

如何在角度通用中使用锤子

任何人都可以帮助我修复锤子错误

})(window, document, 'Hammer');
^
 ReferenceError: window is not defined
at Object._MAP.8 (/Users/ks89/git/universal-starter/dist/server.js:126460:4)
Run Code Online (Sandbox Code Playgroud)

在角度通用。

angular-universal angular angular5

2
推荐指数
1
解决办法
1089
查看次数

NodeJS 应用程序在本地工作时不回答 GAE 上的任何请求

我正在尝试开发要部署在 Google App Engine NodeJS 标准环境中的 Angular Universal 应用程序。

该应用程序通过运行在本地正常工作node server.js

但是,在部署到 GAE 时,页面不断加载,最终失败。在 Google Cloud Console 日志查看器中,我看到以下消息:Process terminated because the request deadline was exceeded. (Error code 123)

package.jsonstart 命令中是"node server.js",而在 app.yaml 中我只声明以下内容:runtime: nodejs8.

服务器代码(在 TS 中,使用 WebPack 打包为 JS):

import { enableProdMode } from '@angular/core';
import * as ngUniversal from '@nguniversal/express-engine';
import * as compression from 'compression';
import * as express from 'express';
import * as path from 'path'; …
Run Code Online (Sandbox Code Playgroud)

google-app-engine node.js angular-universal

2
推荐指数
1
解决办法
893
查看次数

Angular 6 + Universal Karma 测试导入模块

问题

我目前正在尝试使用 Karma 测试我的 Angular 6 应用程序,但我不断遇到如下错误:

Can't bind to 'ngModel' since it isn't a known property of 'mat-select'.
Run Code Online (Sandbox Code Playgroud)

当我在这个单个组件中导入它时它确实有效,但是在另一个组件中我必须再次导入它..

现在带有导入的测试文件之一的示例:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { AdminOverviewComponent } from './admin-overview.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatFormFieldModule, MatTableModule, MatSelectModule } from '@angular/material';

describe('AdminOverviewComponent', () => {
  let component: AdminOverviewComponent;
  let fixture: ComponentFixture<AdminOverviewComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ AdminOverviewComponent ],
      imports: [FormsModule, ReactiveFormsModule, MatFormFieldModule, MatTableModule, MatSelectModule]
    })
    .compileComponents();
  }));

  beforeEach(() => { …
Run Code Online (Sandbox Code Playgroud)

javascript karma-jasmine angular-universal angular

2
推荐指数
1
解决办法
2282
查看次数

类型“typeof NgxJsonLdModule”上不存在属性“forRoot”

我已经安装了这个包@ngx-lite/json-ld。试图使我的 SEO schema.org 动态化。在导入本教程中指定的模块时,我收到此错误:

src/app/app.module.ts(18,21) 中的错误:错误 TS2339:“typeof NgxJsonLdModule”类型上不存在“forRoot”属性。

这是我的 app.module

import { NgtUniversalModule } from "@ng-toolkit/universal";
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";

// Third Party library
import { NgxJsonLdModule } from "@ngx-lite/json-ld";

import { AppComponent } from "./app.component";
import { AppRoutingModule } from "./app-routing.module";
@NgModule({
  declarations: [AppComponent],
  imports: [
     AppRoutingModule,
     NgtUniversalModule,
     NgxJsonLdModule.forRoot()
  ],
  providers: []
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

我正在使用 angular 6.1.9 和 Angular Universal。

npm angular-universal angular

2
推荐指数
1
解决办法
2万
查看次数

Angular Universal ReferenceError - 未定义 KeyboardEvent

我在server.ts 中添加了“domino” ,甚至将webpack.server.config.js更新为:

module: {
    rules: [
              { test: /\.(ts|js)$/, loader: 'regexp-replace-loader', options: { match: { pattern: '\\[(Mouse|Keyboard)Event\\]', flags: 'g' }, replaceWith: '[]', } },
              { test: /\.ts$/, loader: 'ts-loader' }, 
           ]
}
Run Code Online (Sandbox Code Playgroud)

但仍然收到相同的错误:“ReferenceError - KeyboardEvent 未定义”。

我在终端中运行这些命令

$npm 运行构建:ssr

$npm 运行服务:ssr

package.json 中定义的命令为:

"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
"serve:ssr": "node dist/server.js",
"build:client-and-server-bundles": "ng build --prod && ng run angular.io-example:server",
"webpack:server": "webpack --config webpack.server.config.js --progress --colors"
Run Code Online (Sandbox Code Playgroud)

有没有人有想法,如何摆脱这个错误?

javascript universal webpack angular-universal angular

2
推荐指数
1
解决办法
2885
查看次数

Angular 7:如何获取当前页面的完整URL

如何在不使用angular 7的情况下获取完整的当前URL window.location.href

例如,假设我当前的网址是 http://localhost:8080/p/drinks?q=cold&price=200

如何获得完整的URL而不仅仅是完整的URL /p/drinks?q=cold&price=200

我已经尝试过使用this.router.url此命令,但/p/drinks?q=cold&price=200不能提供完整的主机名。

我不想使用的window.location.href原因是它导致ng-toolkit / universal中的渲染出现问题

我尝试遵循此解决方案,这似乎与我存在相同的问题,并且也进行了更新

如何在Angular2中获取服务域名

这是我的代码

windowProvider.js

import { InjectionToken, FactoryProvider } from '@angular/core';

export const WINDOW = new InjectionToken<Window>('window');

const windowProvider: FactoryProvider = {
  provide: WINDOW,
  useFactory: () => window
};

export const WINDOW_PROVIDERS = [
  windowProvider
];
Run Code Online (Sandbox Code Playgroud)

app.module.ts中

@NgModule({
    .......
    providers:[
    .......
    windowProvider
   ]
})
Run Code Online (Sandbox Code Playgroud)

在我的必填页面中:

import {WINDOW as WindowFactory} from '../../factory/windowProvider';
......
 constructor(private router: Router, private helper: Helpers, …
Run Code Online (Sandbox Code Playgroud)

javascript angular-universal angular angular7

2
推荐指数
1
解决办法
2205
查看次数