2 votes

Les boutons des matériaux ne sont pas stylisés

Lors de la première entrée dans ma route /home, mes boutons de navigation n'obtiennent pas le style matériel, la longue chaîne de styles pour .mat-button incluant min-width : 88px (j'ai trouvé que c'était une très bonne clé de recherche). Le style est inclus dans vendor.bundle. Il reçoit beaucoup d'autres styles, comme flex-layout, etc.

Lorsque je l'affiche dans la console de Chrome, la feuille de style n'est pas listée parmi les styles applicables à l'élément. Lorsque j'affiche le DOM (sous elements->head), la feuille vendor.bundle.js n'est pas listée parmi les styles chargés ! Elle est chargée lorsque je navigue vers /login et y reste. Après avoir comparé home.module et login.module, je ne trouve aucun import dans ce dernier mais pas dans le premier (autre que le module de routage et les composants privés des deux modules).

Ce qui est étrange : cela n'arrive qu'à la route /home lors de l'entrée initiale. Toutes les autres routes (comme /login -- /home et /login n'ont pas de garde-route) peuvent voir le style matériel (avec des boutons plus larges d'une largeur minimale de 88px, etc). Plus curieusement, si je navigue vers n'importe quelle route et que je retourne à /home, les styles de matériaux réapparaissent. Le seul cas où ils n'apparaissent pas est lorsque je tape l'URL /home dans le navigateur.

Notez que les boutons de navigation font partie de mon app.conponent, parent de home.component. Je n'ai aucune idée de la raison pour laquelle la navigation initiale vers /home aurait pu modifier le style de app.component.

La trace réseau montre qu'après avoir chargé /home, rien d'autre ne se charge lorsque je passe à /login et que je reviens à /home.

config:
@angular/cli: 1.4.4
@angular/core: 4.4.4
@angular/material: 2.0.0-beta.11

Les 88px que j'ai mentionnés se trouvent à de nombreux endroits, notamment à la ligne 3744 de material/bundle/material.umd.js.

MdButton.decorators = [...

Je n'ai aucune idée de la façon dont je pourrais déboguer ce problème, cela me rend fou.

2voto

Commercial Suicide Points 9031

Pour que les éléments matériels fonctionnent, vous devez importer MaterialModule même :

import { MaterialModule } from '@angular/material'

Et pour certains composants, vous devez les importer séparément, comme ceci (par exemple, pour les boutons) :

import { MdButtonModule } from '@angular/material';

Vous pouvez trouver les importations nécessaires sur la page du composant, pour les boutons ce sera ici (onglet "API") : https://material.angular.io/components/button/api

Le voici :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X