2016-05-12 2 views
0

Ich habe ein seltsames Verhalten in meiner App.angularjs - Parent-Bereich nicht erstellt, aber immer noch sichtbar auf Seite

Grundsätzlich habe ich eine Hauptseite namens Details, und innerhalb Details eine Subview namens detailsAll und detailsEdit.

der Standard ist detailsAll.

Wenn ich die app detailsAll-detailsEdit Navigation verwenden, alles funktioniert gut, aber wenn ich direkt die App laden von detailsEdit, der Umfang von details ist nicht definiert.

Es macht Sinn, da es vielleicht noch nicht erstellt wird, da ich diese Seite noch nie erreicht habe, aber warum auch wenn es undefiniert ist (console.log druckt undefiniert) kann ich immer noch die Daten auf meiner Seite sehen?

Es gibt ein besseres Beispiel hier: https://plnkr.co/edit/qBtT5gkVSkYfjbngZVqw?p=preview

Also, wenn Sie den App Apen, die URL ist folgende: #/app/1(hard coded for test only)/edit/day/1 und so die erste Seite ist die detailsEdit subview.

Wie Sie sehen, ist der Bereich namens onlyOne (erstellt von meinem Eltern) auf der Seite sichtbar, aber derselbe genaue Bereich gibt undefined in der Konsole zurück.

Gleiches geschieht für $scope.test = $scope.onlyOne. Es wird nichts angezeigt, aber wenn Sie zur gelben Taste zurückkehren und etwas anderes auswählen, funktioniert es.

Es ist leichter zu verstehen, wenn Sie es in Aktion sehen, bitte beachten Sie die oben genannten Hinweise.

Warum macht es das? Ich dachte, dass es etwas mit Cache zu tun hat, aber ich habe versucht, Hard Reset und nichts geändert.

Irgendwelche Hilfe?

Vielen Dank im Voraus

Antwort

1

wenn übergeordneter Bereich eine Eigenschaft hat, dann wird das Kind erbt es Wert ist, sonst wird es schafft es Eigentum ist und einen leeren Wert zuweisen. Zu einem späteren Zeitpunkt, wenn der Elternteil die gleiche Eigenschaft definiert, ignoriert das Kind einfach den Elternwert In Ihrem Fall wird beim Öffnen von/app/1/edit/tag/1 die $scope.onlyOne des Kindes mit {} und initialisiert Eltern $scope.onlyOne wird zu einem späteren Zeitpunkt als Async-Aufruf initialisiert. Dies ist der Grund für das Problem, dem Sie gegenüberstehen.

eine Lösung ist, einen Zuhörer in den übergeordneten hinzuzufügen und den Wert für das Kind zu propagieren, sobald der async Anruf

abgeschlossen ist

https://plnkr.co/edit/9jS9qcwgecEJzqsD8L0z?p=preview

+0

Aber warum auch wenn ich ty tatsächlich den Umfang in der neu erstellen Kind mit dem gleichen Code, der den gleichen Bereich in der Eltern erstellt, funktioniert es immer noch nicht? – Nick

+0

natürlich funktioniert es, https://plnrkr.co/edit/rwxkOXEbfM0z1jOTWEHo?p=preview – CodingNinja

+0

es ist eine schlechte Praxis in Bezug auf Speicher, um es wieder erstellt zu haben? Was ist Ihrer Meinung nach der beste und effizienteste Weg, dies zu erreichen? – Nick

Verwandte Themen