标签: angular-universal

Angular2 中出现“nativeElement.querySelector 不是函数”异常

我正在尝试访问 Angular2 中的 div,如下所示:

import { Component, ViewChild, ElementRef, AfterContentInit } from '@angular/core';

@Component({
    selector: 'main',
    template: `
    <div  #target class="parent">
        <div class="child">
        </div>
    </div>
  `
})

export class MainComponent implements AfterContentInit {
    @ViewChild('target') elementRef: ElementRef;

    ngAfterContentInit(): void {
        var child = this.elementRef.nativeElement.querySelector('div');
        console.log(child);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

异常:调用节点模块失败并出现错误:TypeError:this.elementRef.nativeElement.querySelector 不是函数

viewchild angular-universal angular

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

Angular 4 与 Universal + ng2-translate

我目前正在我的应用程序中实现 Angular Universal。我已经有一堆错误需要解决,但我坚持这个错误。我可以构建我的应用程序,aot 编译工作正常,但是当我运行应该引导我的应用程序的服务器时,我可以看到该错误:

我的 \node_modules\ng2-translate\src\translate.pipe.js:1 中出现意外的令牌导入

我已经看到服务器版本有一个特殊的加载器使用 fs 而不是 http 来查找与语言对应的 json 文件。

所以这是我的代码:

应用程序.浏览器.模块.ts

`import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { TranslateModule, TranslateStaticLoader, TranslateLoader } from 'ng2-translate';
import { Http } from '@angular/http';
import { BrowserStateTransferModule } from '@ngx-universal/state-transfer';

import { AppModule } from './app.module';
import { AppComponent } from './app.component';
import { HttpTranslate } from './translate.config';

@NgModule({
  imports: [
    BrowserModule.withServerTransition({
      appId: 'aml-website'
    }),
    BrowserStateTransferModule.forRoot(),
    TranslateModule.forRoot({
      provide: TranslateLoader,
      useFactory: HttpTranslate,
      deps: …
Run Code Online (Sandbox Code Playgroud)

server-side-rendering ng2-translate angular-universal angular

5
推荐指数
0
解决办法
1104
查看次数

Mat-tab 点击事件

我正在使用 Angular Universal 和 Angular Material 2,因此我只能通过点击来工作(就用户事件而言)。是否可以从选项卡附加(单击)属性来更改索引并提取动态数据。

我曾经有一个 getAlbums 方法,它可以检索 selectedIndexChange 上的图片数组,现在这不是一个选项,还有其他方法吗?

唯一的其他方法是有一个单独的按钮来控制选项卡索引。

angular-material2 angular-universal angular angular2-md-tabs

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

错误:文档未定义,在构建角度通用应用程序时

错误 :

factory(require("jquery"), document, window, navigator);
                               ^ReferenceError: document is not defined
Run Code Online (Sandbox Code Playgroud)

面对角度通用渲染服务器端的问题,我用谷歌搜索了这个并浏览了很多帖子,但没有得到任何有用的资源。

angular-universal angular

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

Angular Universal - 排除路线

是否可以对某些路线不使用角度通用?我想对我的静态页面使用角度通用。当我登录我的应用程序时,我不想使用它。我想用 /app/* 排除路由 我该怎么做?

非常感谢

这是我的 server.ts

 // These are important and needed before anything else
import { enableProdMode } from '@angular/core';
// Express Engine
import { ngExpressEngine } from '@nguniversal/express-engine';
// Import module map for lazy loading
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import * as express from 'express';
import { join } from 'path';
import 'reflect-metadata';
import 'zone.js/dist/zone-node';

// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

// Express server
const app = express();

const …
Run Code Online (Sandbox Code Playgroud)

angular-universal angular angular6

5
推荐指数
0
解决办法
2835
查看次数

Angular Universal 和 jQuery(忽略服务器上的 $)

我的角度应用程序将 jquery 用于需要它作为依赖项和其他客户端任务的各种插件。

问题是,universal 无法理解要做什么,因为 jquery 操作服务器端不存在的 dom 元素。

错误参考错误:$未定义

最终目标只是忽略服务器端的 jquery 任务。我读过建议将所有 dom 操作放在仅限客户端的服务中的解决方案,以及使用if (isBrowser) { /* jQuery here */ }...的另一个解决方案,但这对于包装每个 dom 情况并不理想。

https://medium.com/@zainzafar/localstorage-with-angular-universal-2a111fb4af72

这两个都是不错的想法,但我正在寻找更优雅的东西。这将忽略 jquery ($) 而不会出错。例如,以下补丁(放入server.ts)每次都不会出错document或被window使用。无需修改客户端文件即可忽略服务器端。

const domino = require('domino');
const fs = require('fs');
const path = require('path');
const template = fs.readFileSync('./dist/browser/index.html').toString();
const win = domino.createWindow(template);
global['window'] = win;
global['document'] = win.document;
Run Code Online (Sandbox Code Playgroud)

在你告诉我不要使用 jQuery 之前。相信我。我知道。但这个决定不在我手中,这不是我在这里要求的。

编辑

我遇到了这篇文章。他找到了一个简单的解决方案来抑制本地存储错误和窗口错误...我正在寻找像这样的 jquery 解决方案 https://blog.khophi.co/localstorage-undefined-angular-server-side-rendering/

jquery angular-universal

5
推荐指数
0
解决办法
990
查看次数

如何在 Angular 6 通用的 server.ts 中获取环境 process.NODE_ENV=development

app.listen(PORT, () => {
  console.log("process.env.NODE_ENV", process.env.NODE_ENV);
  console.log(`Node server listening on http://localhost:${PORT}`);
});
Run Code Online (Sandbox Code Playgroud)

我在控制台中收到 process.env.NODE_ENV 'none'

构建命令

npm run build:alpha:ssr NODE_ENV=alpha
Run Code Online (Sandbox Code Playgroud)

我的 package.json 文件

{
  "name": "mobilesite-ecommerce",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve -c local",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
    "serve:ssr": "node dist/server",
    "build:client-and-server-bundles": "ng build --prod --deploy-url=##scripturl## && ng run mobilesite-ecommerce:server:production",
    "webpack:server": "webpack --config webpack.server.config.js --progress --colors",
    "build:prerender": "npm run …
Run Code Online (Sandbox Code Playgroud)

variables environment server-side-rendering angular-universal

5
推荐指数
1
解决办法
7832
查看次数

使用 BrowserTransferStateModule 时 TransferHttpCacheModule 的用途

我正在开发一个 Angular Universal 应用程序,并试图以最有效的方式防止服务器/客户端上的重复 HTTP 调用。我已经能够通过利用ServerTransferStateModuleonapp.server.moduleBrowserTransferStateModuleon来完成任务app.module。在进行 HTTP 调用时,我使用 获取或设置状态变量TransferState

这有效。我的问题是,目的是什么,TransferHttpCacheModule因为对我来说它无需使用它即可工作,但其他示例表明这是必要的。它对我来说似乎没有必要,所以我想知道它应该如何适应。我感谢您的帮助!

angular-universal angular

5
推荐指数
1
解决办法
2245
查看次数

部署 Angular Universal 应用程序时找不到模块“firebase/app”

我现在处理这个问题已经快两周了。我尝试了很多解决方法,但似乎没有一个有效。我已经安装angular-fire并安装firebase到它的最新版本,尝试过ng add @angular/fire,配置自定义webpack.config.ts,尝试回滚到每个建议的先前版本。没有人解决这个问题。

实际错误:

de-10@de10-LIFEBOOK-A555:~/Desktop$ node dist/server.js 
internal/modules/cjs/loader.js:797
    throw err;
    ^

Error: Cannot find module 'firebase/app'
Require stack:
- /home/de-10/Desktop/dist/server.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15)
    at Function.Module._load (internal/modules/cjs/loader.js:687:27)
    at Module.require (internal/modules/cjs/loader.js:849:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/home/de-10/Desktop/dist/server.js:125276:18)
    at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30)
    at Module.<anonymous> (/home/de-10/Desktop/dist/server.js:125199:70)
    at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30)
    at Module.<anonymous> (/home/de-10/Desktop/dist/server.js:124984:78)
    at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/home/de-10/Desktop/dist/server.js' ]
}
Run Code Online (Sandbox Code Playgroud)

我不能放弃 Firebase 因为然后我面临:

ERROR in ../node_modules/@angular/fire/auth/auth.d.ts:4:28 - error TS2307: Cannot find module 'firebase/app'.

4 …
Run Code Online (Sandbox Code Playgroud)

firebase angularfire angularfire2 angular-universal

5
推荐指数
1
解决办法
966
查看次数

Angular/Rxjs 管道异步不适用于 ssr?

我在 SSR 上运行的异步管道有问题。没有错误,只有无限循环(似乎服务器正在等待 observable 被解析)。

我在用:

  1. @nestjs/ng-universal
  2. 角 9
  3. 火力基地
  4. 接收器

像这样的简单案例有效:

<p>{{ observable | async }}</p>
Run Code Online (Sandbox Code Playgroud)

但是使用结构指令不起作用:

如果

<p *ngIf="(observable$ | async) > 5">{{ observable$ | async }}</p>
Run Code Online (Sandbox Code Playgroud)

恩福

<p *ngFor="let item of items | async">{{ item }}</p>
Run Code Online (Sandbox Code Playgroud)

使用 async 是一个很好的做法,因为它会避免手动取消订阅以避免组件销毁时内存泄漏。但是,使用手动取消订阅有效。

更新 08/06/2020

当我在http://localhost:4200之后添加 index.html 时,应用程序会加载

异步在模板中是这样的:

<ng-container *ngIf="currentUser$ | async; else loadingUser">
Run Code Online (Sandbox Code Playgroud)

并且 currentUser$ 是在ngOnInit组件的方法中设置的:

  ngOnInit(): void {
    this.currentUser$ = this.authService.currentUser$;
  }
Run Code Online (Sandbox Code Playgroud)

更新 16/06/2020

当我们在组件中删除所有 OnPush 检测策略的使用时,即使在结构指令中使用异步,SSR 模式也能工作。

所以这似乎表明在结构指令中使用带有异步的 OnPush TOGETHER 在 SSR 模式下不起作用。 …

rxjs server-side-rendering angular-universal angular nestjs

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