Просто, чтобы добавить другое решение в смесь ... (как еще один вариант для других разработчиков).И это решение избавляет от необходимости «protectDefault» и «stopImmediatePropagation».
<mat-list>
<mat-list-item>
<a matLine [routerLink]="['/detail']">
<p matLine>Title</p>
</a>
<button mat-icon-button (click)="onAdd()">
<mat-icon>add</mat-icon>
</button>
<button mat-icon-button (click)="onRemove()">
<mat-icon>delete</mat-icon>
</button>
</mat-list-item>
</mat-list>
Дополнительно (мы можем добавить несколько строк текста и значка следующим образом):
<mat-list>
<mat-list-item>
<a matLine [routerLink]="['/detail']">
<mat-icon mat-list-icon>accessibility</mat-icon>
<p>
<span>Text Row 1</span>
<span>Text Row 2</span>
</p>
</a>
<button mat-icon-button (click)="onAdd()">
<mat-icon>add</mat-icon>
</button>
<button mat-icon-button (click)="onRemove()">
<mat-icon>delete</mat-icon>
</button>
</mat-list-item>
</mat-list>
И затемдолжны применяться следующие стили CSS:
.mat-list .mat-list-item a {
cursor: pointer;
display: flex;
align-items: center;
color: black;
text-decoration: none;
}
.mat-list .mat-list-item .mat-list-icon {
float: left;
margin-right: 0.5em;
}
.mat-list .mat-list-item p span
{
display: block;
}
Приведенный выше CSS гарантирует, что значок перемещается влево с примененным правым полем и что элементы выровнены по центру.
Диапазон разделяет строки абзаца.
Затем можно также применить стили к каждому отдельному диапазону, если это необходимо.