$ (document) .ready () иногда не работает в приложении AngularJS - PullRequest
0 голосов
/ 04 октября 2018

У меня есть директива, которая имеет templateUrl.В директиве есть переменная $ scope, инициализированная как

$scope.mapLoaded = false; 

и метод

$scope.onMapLoaded = function(){
    $scope.mapLoaded = true;
    $scope.$apply();
}; 

. В функции $scope.init() я проверяю это, если карта загруженавызов метода initAutocomplete() (этот метод инициализирует API адреса Google)

        $scope.init = function()
        {
            console.log('init() is called ' + ' at '+ Date.now());
            if($scope.applicationId === undefined || $scope.applicationId == '') return false;
            $scope.getAssetLocations($scope.loadAssetLocations);
            $scope.getAccountId($scope.loadAccountId);
            if($scope.mapLoaded === true){
                console.log('[$scope.init] >Map loaded is '+ $scope.mapLoaded + ' at '+ Date.now());
                $timeout( function(){
                    $scope.initAutocomplete();
                    }, 4000 );
           }
        };  

Я также наблюдаю переменную $scope.mapLoaded

           $scope.$watch('mapLoaded', function () {
            console.log('[$watch(mapLoaded)] >Map loaded is '+ $scope.mapLoaded + ' at '+ Date.now());
            if($scope.mapLoaded === true){
                 $timeout( function(){
                     $scope.initAutocomplete();
                     }, 4000 );
            }
         });

И в части просмотра:Я проверяю через jQuery, что, если документ готов, загрузите карту Google.

<html>
..some html here
</html>
<script>
    $(document).ready(function () {
        console.log('loadGoogleMap is called from ApplicationAsset at '+ Date.now() + ' after the document is ready');
        window.setTimeout(loadGoogleMap, 1000);

    });

    function loadGoogleMap(){
        if (window.google && document.getElementById('AppAssetLocation')) {
            angular.element(document.getElementById('AppAssetLocation')).scope().onMapLoaded(); 
            console.log('loadGoogleMap called from ApplicationAsset at '+ Date.now());
        }
        else {
            window.setTimeout(loadGoogleMap, 1000);
            console.log('Again, loadGoogleMap is trying to call from ApplicationAsset at '+ Date.now());
        }
    }

</script>

Но, что здесь происходит, иногда он вызывает window.setTimeout(loadGoogleMap, 1000); внутри $(document).ready, а иногда не вызывает,И это совершенно случайно.

В чем проблема, ребята?

1 Ответ

0 голосов
/ 09 октября 2018

Я использую

angular.element(document).ready(function () {// Code here});

вместо

$(document).ready(function () { // Code here });

, и это решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...