J'utilise actuellement Angular Material2 dans une application Angular 2.4.0 (en utilisant @angular/material: 2.0.0-beta.1
). Pour une raison quelconque, la liste déroulante md-select, au lieu d'apparaître au-dessus de la valeur initiale ou de l'espace réservé ou de la flèche pour sélectionner la liste déroulante, comme illustré dans ces documents, apparaît tout au bas de la page. Au point que si la liste déroulante md-select est en haut à droite de la page (le composant dans lequel j'essaie de placer le mien est en haut à droite de la page) lorsque vous cliquez sur la flèche pour voir les options déroulantes, vous au bas de la page où ils seront affichés. Ils seront également la largeur totale de la page plutôt que la largeur de la liste déroulante.Angular Material2 md-sélectionnez la liste déroulante apparaît au bas de la page
Voici mon composant (au moins les bits pertinents - cette application est assez grande + J'ai commenté ou retiré autant de code ne concernant pas la liste déroulante (et supprimé tout dans la vue autre que la liste déroulante pour réduire le question pour moi-même, ainsi que le rendre plus facile pour quiconque de lire ce pour voir le numéro)):
import { Component, EventEmitter, Input, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
@Component({
moduleId: module.id,
selector: 'my-component',
templateUrl: 'my-component.component.html',
styleUrls: ['my-component.component.css'],
providers: [FormBuilder]
})
export class MyComponent implements OnInit {
@Input() page: Page;
canvasBackgroundColors: string[] = ['White', 'Pink', 'Black'];
draftModule: FormGroup;
// --- Component Constructor ---
constructor(private formBuilder: FormBuilder){}
// --- Angular LifeCycle Hooks ---
ngOnInit() {
this.formBuilderInit();
}
// --- UI Delegates ---
public onSave() {
debugger;
}
// --- Private Helpers ---
private formBuilderInit() {
this.draftModule = this.formBuilder.group({
canvasBackgroundColor: this.page.canvasBackgroundColor,
});
this.draftModule.valueChanges.subscribe(draftMod => {
console.log('Test Module', draftMod);
})
}
}
le NgModule
associé a le MaterialModule
importé de façon appropriée. Voici le point de vue entier (haml):
%form{'[formGroup]' => 'draftModule', '(ngSubmit)' => 'onSave()'}
%md-select{'formControlName' => 'canvasBackgroundColor'}
%md-option{'*ngFor' => 'let color of canvasBackgroundColors', :value => '{{color}}'}
{{color}}
%button{:type => 'submit'}
Save
Actuellement, tous les CSS pour l'application entière a été commenté Je sais donc ce n'est pas quelque chose là-dedans qui affecte le menu déroulant. La liste déroulante fonctionne parfaitement et se met à jour correctement avec le constructeur de formulaires, c'est juste que lorsque vous cliquez sur l'erreur de liste déroulante, les options apparaissent soudainement tout en bas de la page et sont aussi larges que la page. Une fois que vous sélectionnez une option, vous revenez à l'endroit où se trouve votre liste déroulante. J'ai cherché partout et ne peux pas sembler trouver quelqu'un d'autre ayant ce problème ou une solution pour cela. Le plus proche que je suis venu était une personne mentionnant dans ce github issue qu'ils avaient ce problème mais ils l'ont corrigé en ajoutant des thèmes. J'ai essayé cela et l'ajout de thèmes n'a pas fait de différence dans la façon dont la liste déroulante a fonctionné. Pour plus de précisions, lorsque j'ai inspecté les options de menu déroulant qui apparaissent au bas de la page, j'ai remarqué qu'elles apparaissent non seulement à l'extérieur du modèle du composant md-select
mais à l'extérieur de l'application angulaire. Le code HTML affiché dans l'inspecteur ressemble à quelque chose comme le code suivant (simplifié bien sûr pour supprimer tous les composants qui ne sont pas pertinents pour ce problème). Note: my-app
est le sélecteur pour le composant application et cdk-overlay-container
comprend le md-select-panel
et md-select-content
et les options déroulantes):
<html>
<head></head>
<body id="body" class>
<my-app>
<my-component>
<md-select></md-select>
</my-component>
</my-app>
<div class="cdk-overlay-container"></div>
</body>
</html>
Tout conseil serait apprécié!
Comment avez-vous géré votre template CSS? Si vous avez trop d'options, elles déborderont les limites en utilisant les dimensions de votre appareil. –
Salut @RomanC Je ne suis pas totalement sûr d'avoir compris votre question car j'ai commenté la plupart de mes modèles CSS afin d'essayer d'affiner le problème de manière à ce qu'il n'y ait vraiment rien dans la plupart de mes modèles CSS. avec les options de liste déroulante md-select apparaissant au bas de la page est toujours présent. C'était trop pour inclure dans un commentaire mais j'ai mis à jour mon problème ci-dessus avec tout le CSS qui reste au cas où cela aiderait. L'appareil que je suis en train de tester est actuellement un écran de 15 pouces. – NColey
@RomanC Je viens de passer en revue et de commenter tous les CSS pour l'application ainsi que de supprimer autant de composants que possible sans casser l'application, et le problème persiste. J'ai de nouveau mis à jour ma question originale, car je remarque que le html pour les options md-select n'apparait pas juste en dehors du div pour le composant md-select a été placé mais en dehors de l'application angulaire entière qui semble être un bug . Si quelqu'un connaît un correctif pour ce qui serait génial. – NColey