<header>...</header>
<main>
<router-outlet></main>
<footer>...</footer>
<header>...</header>
<main>
<sidebar>...</sidebar>
<router-outlet>
</main>
<footer>...</footer>
const routes: Routes = [
{
path: 'first', component: FirstLayoutComponent, children: [
{ path: 'test1', component: Test1Component }
]
},
{
path: 'secod'm component: SecondLayoutComponent, children: [
{ path: 'test2', component: Test2Component }
]
}
];
<button (click)="showConfirmLogout()">Logout</button>
public showConfirmLogout(): void {
this._confirmService.open('Вы действительно хотите выйти?').then(() => {
this._logout();
});
}
private _logout(): void {
this._authService.logout().subscribe(() => {
this._router.navigate(['/login']);
});
}
ngOnInit() {
ymaps.ready().then(() => {
this.map = new ymaps.Map('map', {
center: [50.450100, 30.523400],
zoom: 12
});
});
}
<app-user *ngFor="let u of users">[user]="u"</app-user>
<app-user *ngFor="let u of users" [user]="u"></app-user>
<app-user *ngFor="let user of users" [user]="user"></app-user>
<!-- validateTime - кастомная валидация -->
<div *ngIf="form.get('time').hasError('required')">...</div>
<div *ngIf="form.get('time').hasError('validateTime')">...</div>
import { NgModule } from '@angular/core';
import {
MatButtonModule,
MatInputModule,
MatCardModule,
MatCheckboxModule,
// ...
} from '@angular/material';
@NgModule({
exports: [
MatButtonModule,
MatInputModule,
MatCardModule,
MatCheckboxModule,
// ...
]
})
export class MaterialModule { }
export { MaterialModule } from './material.module';
// ...imports
import { MaterialModule } from './material';
@NgModule({
exports: [
// ...exports
MaterialModule,
]
})
export class SharedModule { }
Сильно ли это повлияет на производительность? Всё таки я не все компоненты библиотеки материал использую в проекте.
const DEFAULT_LINK: string = '/';
const EMAIL: string = 'blablabla';
const PASSWORD: string = 'blablabla';
export class Auth {
constructor() {
browser.driver.manage().window().maximize();
browser.get(DEFAULT_LINK);
this.login();
}
login() {
browser.sleep(1000);
const email = element(by.css('input[formControlName=email]'));
const pass = element(by.css('input[formControlName=password]'));
const button = element(by.id('login'));
email.sendKeys(EMAIL);
pass.sendKeys(PASSWORD);
button.click();
browser.ignoreSynchronization = true;
browser.sleep(1000);
}
logout() {
browser.sleep(1000);
const buttonLogin = element(by.xpath('путь до кнопки выхода'));
const buttonConfirm = element(by.xpath('путь до кнопки подтверждения выхода'));
buttonLogout.click();
buttonConfirm.click();
browser.ignoreSynchronization = true;
browser.sleep(1000);
}
}
// imports
describe('Page test1', () => {
let auth: Auth;
let page: Page1;
beforeEach(() => {
auth = new Auth();
page = new Page1();
});
afterEach(() => {
auth.logout(); // Проверяем каждую страницу отдельно, поэтому после завершения теста страницы - разлогиниваемся
});
it('Test 1...', () => {
// некие тесты
});
});
<div>
<app-component><!-- Внутри флекс элементы --></app-component>
</div>
...
@Component({
selector: 'app-component',
templateUrl: '...',
host: {
'class': 'app-flex-style'
}
})
export class AppComponent {
....
}
{
"/api": {
"target": "http://НужныйАдрес:НужныйПротокол",
"secure": false
}
}