api通话结束后离子隐藏启动画面

时间:2016-02-29 13:54:29

标签: javascript angularjs api ionic-framework splash-screen

我想保持Splashscreen显示,直到我的应用程序结束,从不同的Api调用中获取多个数据。隐藏Splashscreen的代码基于Timer,我不想要:

 app.run(function($cordovaSplashscreen) {
    setTimeout(function() {
    $cordovaSplashscreen.hide()
  }, 5000)
 })

我拥有它的当前行为&#Splashscreen显示5秒,然后在空白页面中显示第一个视图,仅在几秒钟之后,数据将在我的视图中显示。< / p>

我的问题是:如何在我的app.js中添加逻辑,以便仅在API调用完成时隐藏Splashscreen,这样用户就可以看到第一个视图,其中包含所有可以使用的数据。

2 个答案:

答案 0 :(得分:2)

您可以使用$q.all(promises)内置的promise库等待angularjs完成所有请求。在成功功能中,您可以在控制器中调用$cordovaSplashscreen.hide()来隐藏已经提到的user46772之类的闪屏。示例代码:

index.html

<body ng-controller="AppController"></body>

<强> app.js

var module = angular.module( "app", [ "ngCordova", "yourServices" ] )

module.config( ... );
module.run( ... );
module.controller( "ApplicationController", ApplicationController );

function ApplicationController( $cordovaSplashscreen, $q, apiCallService ) {

    loadData();

    function loadData() {

        $q.all( apiCallService.loadFoo1, apiCallService.loadFoo2, apiCallService.loadFoo3)
             .then( onSuccess, onError );

        function onSuccess() {
            $cordovaSplashscreen.hide()
        }

        function onError() {
            // do something useful else
        }
    }
}

<强> yourServices.js

angular
    .module( "yourServices", [ "$http" ] )
    .factory( "apiCallService", apiCallService );

function apiCallService( "$http" ) {
    return {
        loadFoo1: loadFoo1,
        loadFoo2: loadFoo2,
        loadFoo3: loadFoo3
    }

    function loadFoo1() {
        return $http.get( "yourAPI" );
    }

    ...
}

请注意,此代码不是一个有效的示例。但它应该解释你如何着手解决你的问题。此外,如果您的某个请求在onError()函数失败,您必须考虑会发生什么。

此外,您应该将代码包装到onDeviceReady事件中。假设您正在使用ionic,您可以使用这段代码:

$ionicPlatform.ready( loadData );

不要忘记将$ionicPlatform注入控制器功能。

答案 1 :(得分:1)

在运行块上,我没有看到任何函数调用来获取数据。如果您的API是基于承诺的,则可以在成功或错误功能上隐藏启动画面。但我不鼓励你从运行块中调用它,因为它可能会导致难以检测到的问题。

我建议使用ui-router并尝试解析功能。在转换到视图之前加载此函数。