我在Cordova移动应用程序中使用Angular + JQMobile,我在承诺方面遇到了一些困难。我有一个cordovaReady服务,它返回一个承诺,我希望在承诺解决后隐藏一个闪屏(请不要讲课)。当我尝试使用if-then条件在不同时间解决promise时,就会出现这个伎俩。我的代码:
app.factory('cordovaReady', function($q) {
var deferred = $q.defer();
return {
ready: function() {
document.addEventListener(
"deviceready",
function () {
deferred.resolve();
},
false
);
return deferred.promise;
}
}
});
app.run(['$rootScope', '$location', 'TagTemplates', 'cordovaReady', function($scope, $location, TagTemplates, cordovaReady) {
// If there is a user logged in, --fire camera-- and go to tag template
if ($scope.currentUser) {
// fire camera here, make sure cordova is ready first.
// alert('found user');
var promise = cordovaReady.ready();
promise.then(function() {
// alert('about to capture');
console.log('firing capture');
$scope.captureImage();
navigator.splashscreen.hide(); // this one fires.
});
console.log($scope.currentUser);
$scope.templates = $scope.currentUser.attributes.templates[0];
$scope.$apply();
$location.url("/#main");
} else {
var promise = cordovaReady.ready();
promise.then(function() {
alert('no user logged in, hide splashscreen');
navigator.splashscreen.hide(); // this one does not.
$scope.$apply(); // even with this.
});
}
}
对于现有用户,会根据需要隐藏启动画面,我想是因为在此if语句中发生了范围更新。但是,如果没有现有用户,则在下一个摘要周期(点击我的应用程序中的按钮或链接)之前,不会触发启动画面。我用警报验证了这一点。
我已经尝试了各种范围的应用,包括具有0延迟的setTimeout变体等。
有什么想法吗?
感谢。