Ich habe festgestellt, dass die meisten Fragen in Bezug auf dieses Thema in Bezug auf eine Alternative für die Funktion 0Query $(document).ready
in angular sind, die angular.element($document).ready
ist, aber ich möchte eine testbare/Best Practice-Alternative dazu.Alternative zu angular.element (Dokument) .ready
Ich spreche gerade Bing Maps, die geladen werden müssen, bevor der Code in meinem Controller ausgeführt wird.
derzeit wickle ich den Controller-Code im Dokument bereit:
angular.element($document).ready(function() {
self.map = new Microsoft.Maps.Map(document.getElementById('map'), {
credentials: $scope.credentials,
enableClickableLogo: false,
enableSearchLogo: false,
showDashboard: false,
disableBirdseye: true,
allowInfoboxOverflow: true,
liteMode: true,
minZoom: 2
});
$scope.$watch('zoom', function (zoom) {
self.map.setView({animate: true, zoom: zoom});
});
if ($scope.onMapReady) {
$scope.onMapReady({ map: self.map });
}
});
Welche funktioniert, aber ich bin nicht in der Lage, es zu testen, so dass ich davon ausgehen, diese falsche Verwendung ist. Ich habe versucht, eine Variable in der Direktive von $scope.loaded = true;
zu setzen, wie ich lese, dass, wenn die Direktive Link Funktion getroffen wird das DOM geladen werden muss. Ich habe dann versucht, das Dokument zu ersetzen bereit, mit:
$scope.$watch('loaded', function() {
self.map = new Microsoft.Maps.Map(document.getElementById('map'), {
credentials: $scope.credentials,
enableClickableLogo: false,
enableSearchLogo: false,
showDashboard: false,
disableBirdseye: true,
allowInfoboxOverflow: true,
liteMode: true,
minZoom: 2
});
if ($scope.onMapReady) {
$scope.onMapReady({ map: self.map });
}
});
$scope.$watch('zoom', function (zoom) {
self.map.setView({animate: true, zoom: zoom});
});
die ‚geladen‘ Uhr wie erwartet funktioniert, aber natürlich die Zoom-Hit auf Last und das ist, bevor die Karte gesetzt. Ich habe das Gefühl, ich könnte das Dokument zu einer $timeout
Funktion ändern, aber das scheint ein Workaround und nicht die richtige Lösung zu sein, gibt es eine Best-Practice-Alternative zu angular.element($document).ready
, die auf die gleiche Weise funktioniert, aber erlaubt es mir, den Inhalt erfolgreich zu testen?
Was ist der Kontext für diesen Code? Normalerweise sollte die Angular-App mit dem Bootstrapping gestartet werden, wenn das Dokument fertig ist. Daher ist dieser Wrapper innerhalb eines Controllers zumindest nutzlos. – estus
@estus bing maps heißt so: '' was einmal geladen gibt uns Zugriff auf "Microsoft" im oben genannten Snippet, das anscheinend lange genug dauert, um nur in einem Controller in der doc bereit – gardni
Bitte geben Sie eine Möglichkeit, das Problem als fiddle/plunk zu replizieren, wenn es möglich ist, ohne Ihre API offen zu legen Schlüssel oder etwas. Im Allgemeinen lautet die Antwort: "Sie sollten nur einmal mit angular.bootstrap fertig werden". Es geht also nur um die Interaktion mit einem bestimmten Skript. Wenn Ereignisse in dieser API vorhanden sind, die angeschlossen werden können, um sicherzustellen, dass sie bereit sind, sollten Sie sie stattdessen verwenden. – estus