eckigen Anweisung wird nicht gerendert, es sei denn, Sie erzwingen den manuellen Seitenumbruch

8

Ich erlebe das folgende seltsame Verhalten in ui-bootstrap und angular 1.4. Wenn ich eine footable -Tabellenanweisung in ein benutzerdefiniertes Bootstrap-Panel namens hpanel lege, nimmt das footable anfangs mehr Platz ein als das Panel selbst:

Wenn ich jedoch die Größe des Bildschirms ändere (z. B. indem ich das Bedienfeld "Entwicklerwerkzeuge" hier klappe), wird die Anweisung footable selbst gezeichnet und fügt sich in das Feld ein:

Wichtig: Ich habe ähnliche Probleme mit den angular-c3 -Diagramm-Direktiven festgestellt (sie werden falsch geladen, überschreiten die Größe von hpanel, aber bei der Größenänderung der Seite verhalten sich gut), also handelt es sich wahrscheinlich nicht nur um eine defekte Direktive.

Hast du etwas Ähnliches gesehen?

DETAILS:

Im Folgenden finden Sie eine HTML-Vorlage, die den nicht funktionalen Teil der Seite darstellt. Dort haben wir ein hpanel und darin eine Tabelle mit eckigen-fussbaren Anweisungen ^ 1.0.3 , die darauf angewendet werden.

Hier ist die Vorlage ( toolList.html ):

%Vor%

Die Footable-Anweisung soll einige Spalten der Tabelle ausblenden und nach dem Klicken auf eine Tabellenzeile anzeigen. Es bietet auch Seitennummerierung. Es scheint nicht zu funktionieren, wenn die Seite geladen wird, aber wenn ich die Größe der Seite ändere und die Bildschirmgröße den Rand des Medientyps kreuzt (so dass der mittlere Bildschirm im Bootstrap-Modus zu einem großen Bildschirm wird), erscheinen die Seitentasten Spalten, die versteckt werden sollen, sind ausgeblendet.

So importiere ich die footable -Direktive in mein Hauptmodul app.js :

%Vor%

Ich verwende webpack , um all diese Module zu laden und bower , um die Abhängigkeiten zu installieren.

hpanel ist nur eine scss -Klasse, hier ist die Definition:

%Vor%

Hier ist tool.module.js Datei, die die Vorlage animiert:

%Vor%

tool.service.js :

%Vor%

ANTWORT: Die Gemeinschaft ist großartig!

  • vor 1,5 Jahren wurde diese Richtlinie erstellt
  • Vor 12 Tagen wurde dieser Bug von Alexryan in seiner Gabel behoben
  • Vor 10 Tagen habe ich diese Frage auf StackOverflow
  • gepostet
  • Vor 8 Tagen habe ich ein Kopfgeld auf diese Frage gelegt
  • vor 7 Tagen ziscloud approved pull request
  • heute morgen ist die Bounty abgelaufen und im letzten Moment hat Walfrat herausgefunden, dass der Bug behoben wurde

Also, ja, es war ein Fehler in der Direktive, der dazu führte, dass er sich selbst zeichnete, bevor er die Daten vom Server bekam. Mit dem Bugfix habe ich gerade load-when="vm.tools" -Attribut zu der Direktive hinzugefügt und es funktioniert jetzt gut.

Danke, Alexryan, Ziscloud, Walfrat und andere Kommentatoren / Antworter. StackOverflow und Github haben meinen Tag einfach gemacht!

    
Boris Burkov 07.05.2016, 17:09
quelle

2 Antworten

1

Verwenden Sie diese Anweisung? Ссылка . Es handelt sich um eine selbstgemachte (also nicht vom Redakteur der Fußnote ausführbare) Direktive, so dass sie nicht richtig auf Angularjs angewendet werden kann.

Wenn Sie sich den Code ansehen, müssen Sie ein Attribut load-when verwenden, wenn Sie die Initialisierung des Rasters verzögern möchten, obwohl Sie das resolve-Attribut in Ihrem Status verwenden, kann es sich lohnen, es zu testen. load-when soll beim Start ein leeres Array sein und wird die Ladung auslösen, nachdem das Array nicht mehr leer ist, aber die binded Daten werden nicht für die Initialisierung von dem verwendet, was ich gesehen habe.

Hinweis: Ich konnte selbst keinen richtigen PLNKR setzen, ich weiß nicht, welche Version (und mit welcher jQuery-Version) und Online-Links Sie verwenden.

    
Walfrat 18.05.2016, 07:07
quelle
1

Da Sie Daten asynchron laden (wie in den Kommentaren erwähnt), wird Ihr HTML gerendert, bevor er irgendwelche Daten darin hat. Dies bedeutet, dass die Richtlinie zu früh ausgelöst werden kann (wenn sie versucht, sich basierend auf Daten anzupassen). In diesem Szenario möchten Sie normalerweise einen ng-if-Wert für den Teil Ihres HTML-Codes ausgeben, der vom Laden der Daten abhängig ist (und ein Lade-GIF oder etwas an dessen Stelle anzeigen). Sie können entweder den ng-if-Off der Daten ausführen, die selbst definiert sind, oder einen separaten Booleschen Wert beibehalten, den Sie nach der Auflösung des Versprechens setzen.

    
sourdoughdetzel 15.05.2016 00:39
quelle