您可以使用angularjs
內置承諾庫來等待所有請求完成$q.all(promises)
。在成功功能中,您可以在控制器中調用$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
注入到控制器的功能。
是的,抱歉,如果它令人困惑,但Api調用是在一個專用於它的外部工廠中進行的,我將此工廠注入到需要顯示數據的控制器中,但我需要整個邏輯(如果可能)在顯示Splashscreen時呼叫我的工廠,然後根據您所建議的成功承諾隱藏它。 –