Skip to content

Commit 5c7a1f8

Browse files
committed
Merge branch 'master' into material2
# Conflicts: # .angular-cli.json # package.json # src/app/app.component.html # src/app/app.routing.ts # src/app/materialPage/materialPage.component.scss
2 parents 7708ad0 + b5cc8fd commit 5c7a1f8

File tree

4 files changed

+53
-10
lines changed

4 files changed

+53
-10
lines changed

README.md

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@
55

66
- публичный чат https://t.me/angular_universal_ru
77

8-
- http://ssr.gorniv.com/ - серверный рендеринг
8+
- http://master-ssr.gorniv.com/ - серверный рендеринг master
99

10-
- http://csr.gorniv.com/ - клиенский рендеринг
10+
- http://master-csr.gorniv.com/ - клиенский рендеринг master
11+
12+
- http://ionic-ssr.gorniv.com/ - серверный рендеринг ionic
13+
14+
- http://ionic-csr.gorniv.com/ - клиенский рендеринг ionic
15+
16+
- http://material2-ssr.gorniv.com/ - серверный рендеринг material2
17+
18+
- http://material2-csr.gorniv.com/ - клиенский рендеринг material2
19+
20+
- http://primeng-ssr.gorniv.com/ - серверный рендеринг primeng
21+
22+
- http://primeng-csr.gorniv.com/ - клиенский рендеринг primeng
1123

1224
## Как запустить
1325
- `yarn` или `npm install`
@@ -25,14 +37,15 @@
2537
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine альтернативный движок для рендеринга. В примере не используется, принципиально в схеме подключения не отличается от express-engine
2638
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - модуль поиска модулей для LazyLoading - вещь нужная и используемая. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
2739

28-
## Особенности
40+
## Особенности(Важно)
2941
- модуль для TransferHttp использует `import { TransferState } from '@angular/platform-browser';` и необходим для реализации запроса rest api на сервере и остутствия повторного запроса второй раз. Смотрите `home.component.ts` (задержка 3с)
3042

3143
```ts
3244
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
3345
this.result = result;
3446
});
3547
```
48+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - чтобы не было мигания страницы!
3649

3750
- для работы с куками написан `AppStorage`, которыйй при помощи DI позволяет отдавать разную реализацию для сервера и бразуера. Смотрите `server.storage.ts` и `browser.storage.ts` по реализациям. В `server.ts` есть
3851
```ts
@@ -49,11 +62,37 @@ providers: [
4962

5063
- webpack.config.js прописан исключительно для сборки файла server.ts в server.js, так как angular-cliт имеет [баг](https://github.com/angular/angular-cli/issues/7200) для работы с 3d зависимостями.
5164
- для решения части проблем используется следущий код в `server.ts`
65+
66+
Решение проблем глобавльных переменных, в том числе `document is not defined` и `window is not defined`
67+
```ts
68+
const domino = require('domino');
69+
const fs = require('fs');
70+
const path = require('path');
71+
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
72+
const win = domino.createWindow(template);
73+
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
74+
const styleFiles = files.filter(file => file.startsWith('styles'));
75+
const hashStyle = styleFiles[0].split('.')[1];
76+
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
77+
78+
global['window'] = win;
79+
Object.defineProperty(win.document.body.style, 'transform', {
80+
value: () => {
81+
return {
82+
enumerable: true,
83+
configurable: true
84+
};
85+
},
86+
});
87+
global['document'] = win.document;
88+
global['CSS'] = style;
89+
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
90+
global['Prism'] = null;
91+
92+
```
93+
5294
```ts
53-
global['window'] = global;
54-
global['document'] = template;
55-
global['navigator'] = req['headers']['user-agent'];
56-
global['CSS'] = null;
95+
global['navigator'] = req['headers']['user-agent'];
5796
```
5897
это позволяет убрать часть проблем при работе с `undefined`.
5998

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
"@angular/core": "5.0.1",
2626
"@angular/forms": "5.0.1",
2727
"@angular/http": "5.0.1",
28-
"@angular/material": "5.0.0-rc0",
2928
"@angular/platform-browser": "5.0.1",
3029
"@angular/platform-browser-dynamic": "5.0.1",
3130
"@angular/router": "5.0.1",

src/app/app.component.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
<nav>
22
<ul>
33
<li><a [routerLink]="['']" [routerLinkActive]="['router-link-active']">home</a></li>
4+
<<<<<<< HEAD
45
<li><a [routerLink]="['/material']" [routerLinkActive]="['router-link-active']">material</a></li>
56
<li><a [routerLink]="['/back']" [routerLinkActive]="['router-link-active']">back</a></li>
7+
=======
8+
<li><a [routerLink]="['/mock']" [routerLinkActive]="['router-link-active']">mock</a></li>
9+
<li><a [routerLink]="['/back']" [routerLinkActive]="['router-link-active']">back http</a></li>
10+
>>>>>>> master
611
</ul>
712
</nav>
813
<router-outlet></router-outlet>

src/app/app.routing.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ const routes: Routes = [
55
{ path: 'material', loadChildren: './materialPage/materialPage.module#MaterialPageModule' },
66
{ path: 'back', loadChildren: './transfer-back/transfer-back.module#TransferBackModule' },
77
];
8-
9-
export const AppRoutes = RouterModule.forRoot(routes);
8+
// must use {initialNavigation: 'enabled'}) - for one load page, without reload
9+
export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });

0 commit comments

Comments
 (0)