目前支持 Angular 2.0 的所有插件似乎都不支持 Angular Universal。由于直接DOM访问,它显示错误。我想以DOMAngular 2 方式更改访问代码。任何人都可以建议窗口、文档、、、、等queryselector()的Angular 2 方式吗?querySelectorAll()document.getElementsByTagname()getElementsByClassName()
所以我使用的一些软件包不能通用。我想知道是否有一种方法可以让我们只能在服务器上加载特定的模块。
目前,根据官方存储库,您可以使用此技术检查您是否在组件内的浏览器或服务器中:
constructor(@Inject(PLATFORM_ID) private platformId: Object) { ... }
...
if (isPlatformBrowser(this.platformId)) {...}
Run Code Online (Sandbox Code Playgroud)
但是,如果我可以通过某种全局变量检查当前我们是在浏览器还是服务器中,那么选择要加载的模块将变得微不足道。
我正在尝试实现angular Universal。但我想暂时将SSR限制在2条特定的路线上。原因是。
1)Universal 是一个仍在发展中的东西,它会导致一些意想不到的行为@angular/flex-layout 和nested lazy loading
2)我不需要在所有页面上进行 SEO
所以我试过这样的事情
app.get('/campaign/*/*', (req, res) => {
res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req });
});
app.get('/', (req, res) => {
res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req });
});
app.get('*', (req, res) => {
});
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在页面中导航时,它会 /campaign/new-channel 永远重新加载。
我期望的预期行为是页面通常不会呈现任何内容。
我想我必须做一些不同的事情,因为 node express 应该将路由的处理传递给 angular 。
知道如何实现这一点吗?server.ts
的其余代码从这里复制https://github.com/angular/universal-starter/blob/master/server.ts
PS有这篇关于stackoverflow Angular通用渲染的帖子仅适用于某些路线,但没有提供解决方案。所以我做了这个,因为我不知道我是否允许在答案中打开新线程
我在加载网站时出现闪烁。来自服务器的 HTML 被下载,然后在 UI 中呈现视图,并且在转换之间有一个小的闪烁。
我设法通过添加来修复它:
RouterModule.forRoot([ // ROUTES HERE ], { initialNavigation: 'enabled' })
Run Code Online (Sandbox Code Playgroud)
但我想知道为什么会这样?因为组件的懒加载?所以我们在 UI(角度组件)构建 DOM 的过渡之间出现了闪烁?假设我有一个“轻”组件,闪烁会更快?
技术:Angular Cli、Angular version 7、Angular Google Maps、Firebase Functions。
问题:我正在尝试为我的 angular 通用应用程序提供服务,但在构建时遇到 angular google maps 错误。
我得到的错误:
/Users/test/Public/Leisure/leisure-app/functions/node_modules/@agm/core/services/managers/info-window-manager.js:1
(function (exports, require, module, __filename, __dirname) { import {
Observable } from 'rxjs';
^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
Run Code Online (Sandbox Code Playgroud)
似乎 Angular Universal 不喜欢第三方库。
我关注的资源: https : //hackernoon.com/deploying-angular-universal-v6-with-firebase-c86381ddd445
我的应用模块:
import { AgmCoreModule } from '@agm/core';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { AngularFireDatabase } from '@angular/fire/database';
import { AngularFireModule } from '@angular/fire';
import { ServiceWorkerModule …Run Code Online (Sandbox Code Playgroud) firebase angular-google-maps google-cloud-functions angular-universal angular
我正在学习angular Universal。在这一步:
ng add @nguniversal/express-engine --clientProject angular.io-example
Run Code Online (Sandbox Code Playgroud)
它应该添加一些文件,即:main.server.ts,但它没有做任何事情。我也用 sudo 尝试了相同的命令。问题是什么?
我在 azure devops 上有一个带有 .net core 和 angular 的应用程序。现在,我想实现 Angular Universal SSR。
然后,我在我的项目上做了:
ng 添加@nguniversal/express-engine --clientProject angular.io-example
我的 package.json 是:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "npm run build:client-and-server-bundles && npm run compile:server",
"build:ssr": "npm run build:client-and-server-bundles && npm run compile:server",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"bundle-report": "ng build --extract-css --stats-json && webpack-bundle-analyzer dist/stats.json",
"compile:server": "webpack --config webpack.server.config.js --progress --colors",
"serve:ssr": "node dist/server",
"build:client-and-server-bundles": "ng build --extract-css --prod && ng run Catevering:server:production"
}
Run Code Online (Sandbox Code Playgroud)
然后,我可以在 …
server-side-rendering azure-devops asp.net-core angular-universal
我在主页上遵循 angular 通用:https : //angular.io/guide/universal
没有通用,我用命令运行我的 angular 项目
ng serve --ssl true --ssl-key /node_modules/browser-sync/lib/server/certs/server.key --ssl-cert /node_modules/browser-sync/lib/server/certs/server.crt --主机 0.0.0.0
现在,我将通用添加到我的项目中,但不知道如何设置它使用“https”运行。
请帮帮我。
这是我的 server.ts
导入 'zone.js/dist/zone-node'; 从“@angular/core”导入{enableProdMode};
// Express Engine
import {ngExpressEngine} from '@nguniversal/express-engine';
// 为延迟加载导入模块映射 import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader';
import * as express from 'express';
从“路径”导入 {join};
// 在 Prod 模式下更快的服务器渲染(从不需要开发模式)
enableProdMode();
// Express 服务器
const app = express();
const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist/browser');
// * 笔记 ::
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
// …
我想在我的 Angular 项目(Angular 8)上使用Angular Universal. 当我运行以下命令时,它将在dist名为 server 和 browser 的文件夹中创建 2 个文件夹以及另一个名为 server.js 的文件
npm run build:ssr
Run Code Online (Sandbox Code Playgroud)
然后运行以下命令
npm run serve:ssr
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) { ^ ReferenceError: 区域未定义
笔记:
第一次运行命令(npm runserve:ssr)时出现以下错误
var DragEvent = window.DragEvent;
^
ReferenceError: window is not defined
Run Code Online (Sandbox Code Playgroud)
通过在 dist 文件夹中的 server.js 文件的开头添加以下代码来修复此问题
const domino = require('domino');
const fs = require('fs');
const path = require('path');
const template = fs.readFileSync(path.join(__dirname, '.','browser',
'index.html')).toString();
const win = domino.createWindow(template);
global['window'] = win; …Run Code Online (Sandbox Code Playgroud) 我在我的项目中添加了 Angular Universal(升级到 Angular 8)。这是一个相对较大的工程。解决所有窗口、jquery 和 localstorage 问题后,我已经成功运行该应用程序。但问题是,服务器运行在 localhost:4000 上。当我在浏览器中输入 localhost:4000 时,没有任何反应。但是如果我输入 localhost:4000/index.html,它就会开始正常加载并返回到基本 localhost:4000。然后每条有角度的路线都可以正常工作。但如果我尝试刷新任何页面,它不会加载任何内容。
我的服务器.ts
import 'zone.js/dist/zone-node';
// ssr DOM
const domino = require('domino');
const fs = require('fs');
const path = require('path');
const template = fs.readFileSync(path.join('dist/browser', 'index.html')).toString();
const win = domino.createWindow(template);
global['window'] = win;
Object.defineProperty(win.document.body.style, 'transform', {
value: () => {
return {
enumerable: true,
configurable: true,
};
},
});
// mock documnet
global['document'] = win.document;
// othres mock
global['CSS'] = null;
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
global['Prism'] = null;
import …Run Code Online (Sandbox Code Playgroud) node.js express server-side-rendering angular-universal angular
angular ×8
angular7 ×1
asp.net-core ×1
azure-devops ×1
express ×1
firebase ×1
javascript ×1
node.js ×1