Итак, я немного поигрался с Angular и хотел добавить в свое приложение закусочную материала на случай ошибки в моем приложении.
Итак, у меня есть домашняя страница, и моя навигация представляет собой оверлей с z-индексом 3000. В навигации есть возможность войти в систему (см. Рисунок ниже). Я ввел неверные данные журнала специально, чтобы запустить обработчик ошибок и отобразить панель закусок.
Закусочная действительно появляется. Однако он скрыт за навигацией. Как сделать так, чтобы он отображался над навигацией? Я попытался добавить z-index 10000 в scss компонента, который обрабатывает снэк-бар, с помощью следующего кода:
* {
z-index: 10000;
}
и
::root {
z-index: 10000;
}
Но ничего не вышло. Кто-нибудь знает как это сделать?
App.component.ts: пользовательская навигация - это то место, где я обрабатываю вход в систему. Уведомления содержат логику для закусочной
<navigation></navigation>
<user-navigation>
</user-navigation>
<router-outlet></router-outlet>
<notifications></notifications>
Notifications.component.ts, это работает, он открывает снэк-бар, но он скрыт за пользовательской навигацией
import { Component, OnInit } from '@angular/core';
import {MatSnackBar} from '@angular/material';
import {NotificationService} from '../services/notification.service';
@Component({
selector: 'notifications',
templateUrl: './notifications.component.html',
styleUrls: ['./notifications.component.css']
})
export class NotificationsComponent implements OnInit {
constructor(public snackBar: MatSnackBar, private notificationService: NotificationService) { }
ngOnInit() {
this.notificationService.notification$
.subscribe((message) => {
console.info('received the notification', message);
this.openSnackBar(message);
});
}
openSnackBar(message: string, action?: string) {
setTimeout(() => {
this.snackBar.open(message, action, {
duration: 20000
});
}, 0);
}
}
Это страница входа в систему. Домашняя страница находится за этим и не видна из-за высокого z-индекса, который я дал навигации.
Это домашняя страница, когда я закрываю навигацию. Панель закусок видна, но я хочу, чтобы она была видна и с открытой навигацией.






вы можете попробовать переопределить этот класс css
style.css / style.scss
.cdk-overlay-pane{
z-index: 10000 !important;
}
Пробовал, но все равно не видно. По-прежнему скрыт за навигацией.
вы добавили класс css в style.css?
Я добавил указанный выше класс в style.css (основной файл css)
ну, на самом деле styles.css. У меня нет файла style.css.
нельзя просто поставить элемент <notifications> сверху?
<notifications></notifications>
<navigation></navigation>
<user-navigation></user-navigation>
<router-outlet></router-outlet>
Ничего не менял.
Может быть, простая репликация на Stackblitz? Немного сложно представить себе стопку страниц входа в систему поверх домашней. Возможно, это не связано с вашей проблемой, но похоже, что дизайн немного не такой. IMHO, неавторизованный пользователь должен быть перенаправлен на его собственную страницу входа в систему вместо того, чтобы создавать другой слой поверх домашней страницы.
Попробуйте поместить это в свой базовый / корневой файл css, если у вас его нет, попробуйте добавить теги в свой файл index.html и добавьте этот CSS туда.
:host /deep/ .cdk-overlay-pane{
z-index: 1000;
}
Я была такая же проблема. Я решил уменьшить z-индекс нижнего колонтитула вместо увеличения закусочного.
С Уважением M
(Угловой 8) Помещение этого в style.css у меня отлично сработало:
.cdk-overlay-container {
position: fixed;
z-index: 10000;
}
Это сработало для меня:
::ng-deep .cdk-overlay-container {
z-index: 10000 !important;
}
PS: Незначительное изменение ответа MSXman
(Angular 9) Я добавляю следующий код css, чтобы исправить это.
styles.scss
.cdk-overlay-container {
z-index: 99999999999999;
}
У меня проблема, потому что при использовании MatSnackBar и MatDialog, поскольку MatSnackBar всегда перекрывался диалогом. С этим решением я получил MatSnackBar с более высоким z-index: https://github.com/angular/components/issues/7471#issuecomment-340856500
думаю, вы можете попробовать использовать ng deep, он давно устарел, но еще не снят