$ ionicLoading загружается навсегда

0

Я пытаюсь показать ионный загрузчик, пока мои данные не будут получены, но как-то его загрузка навсегда. Я проверил некоторые решения, но не работал. Это мой код.

$ ionicLoading.show({content: 'Loading', анимация: 'fade-in', showBackdrop: true, maxWidth: 200, showDelay: 0});

    $scope.allcourses = CourseFactory.FindFreeCourses($scope.search).then(function(result){
        console.log(result);
        $scope.allfreestadiums = result;
        $ionicLoading.hide();
    }, function(error){
        console.log(error);
        $ionicLoading.hide();
        $ionicLoading.show({
            template: 'Network Error',
            scope: $scope
        });
        $timeout(function() {
            $ionicLoading.hide();
        }, 100);
    })

Когда я звоню только

$ scope.allcourses = CourseFactory.FindFreeCourses($ scope.search);

Он работает нормально, но я хочу показать загрузку, прежде чем она появится на экране. В чем может быть проблема?

Теги:
ionic-framework

1 ответ

1
Лучший ответ

console.log() может вести себя по-другому на устройстве/эмуляторе, чем в браузере. Хотя браузер обычно принимает любой объект в качестве параметра, как console.log(obj), это проблематично на устройствах. Вместо этого вы можете попробовать: console.log("some message", JSON.stringify(obj))

$ionicLoading.show({ content: 'Loading', animation: 'fade-in', showBackdrop: true, maxWidth: 200, showDelay: 0 });

$scope.allcourses = CourseFactory.FindFreeCourses($scope.search).then(function(result){
  $ionicLoading.hide();
  $scope.allfreestadiums = result;
  console.log("success", JSON.stringify(result));
}, function(error){
  $ionicLoading.hide();
  console.log("error", JSON.stringify(error));
})

Также возможно, что функция console.log() не работает, поскольку консоль не определена при вызове. Это зависит от того, как вы тестируете, и если среда предоставляет консольную переменную по умолчанию. Это немного сценарий Шредингера - действие открытия консоли для разработчиков устраняет проблему, потому что консольная переменная определяется, когда вы делаете это в некоторых браузерах. Попробуйте прокомментировать вызовы console.log() и переместите $ ionicLoading.hide() в начало этих обратных вызовов.

Или вы можете проверить, что window.console существует до вызова console.log(), как показано здесь:

$ionicLoading.show({ content: 'Loading', animation: 'fade-in', showBackdrop: true, maxWidth: 200, showDelay: 0 });

$scope.allcourses = CourseFactory.FindFreeCourses($scope.search).then(function(result){
  $ionicLoading.hide();
  window.console && console.log("success", JSON.stringify(result));
  $scope.allfreestadiums = result;
}, function(error){
  $ionicLoading.hide();
  window.console && console.log("error", JSON.stringify(error));
})
  • 0
    Привет, спасибо за ответ, но я попробовал все, что вы упомянули, но все равно его загрузка навсегда. Я удалил console.log, поместил скрытие поверх колбэка, но он все еще не работал. Это может быть проблема браузера или заводского метода? потому что если я вызываю только $ scope.allcourses = CourseFactory.FindFreeCourses ($ scope.search), это работает нормально.
  • 0
    Много ли вы работали с угловыми обещаниями? CourseFactory.FindFreeCourses () должен будет вернуть обещание, и это обещание должно быть разрешено для работы. Я предполагаю, что в FindFreeCourses () вы не разрешаете обещание, которое необходимо для выполнения любого из этих обратных вызовов .then (). Внутри FindFreeCourses () обязательно сделайте что-то вроде: var q = $q.defer(); /* do your course lookup callback */ q.resolve(); /* ... */ return q.promise;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню