离子框架,相互显示两个ionicLoading对话框

时间:2014-08-07 13:39:00

标签: angularjs ionic-framework

我正在为项目使用离子框架,并且遇到了ionicLoading对话框的问题。

我创建了一个工厂,我将其注入不同的控制器以显示某些消息。我显示加载对话框,然后调用进行api调用的工厂。当服务返回错误回调时,我隐藏了对话框。问题是,当我显示第二个对话框时(在加载对话框关闭后),它永远不会显示。

这是我的displayMessage工厂:

factory('displayMessage', function($ionicLoading) {

var displayMessage = {
    // Just displays a loading dialog. You need to call hideDialog to hide it. See LoginCtrl for an example.
    showLoading : function() {
        $ionicLoading.show({
            templateUrl: 'templates/dialogs/loading.html'
        });
    },
    // Hides the loading dialog
    hideLoading : function() {
        $ionicLoading.hide();
    },
    // Hide loading dialog and display toast
    hideLoadingComplex : function(message){
        $ionicLoading.hide();
        $ionicLoading.show({
            template: 'Blah',
            duration : 1500
        });
    },
    // Displays a short toast message (1.5 seconds), requires a string value
    showToastShort : function(message) {
        $ionicLoading.show({
            template: message,
            duration : 1500
        });
    },
    // Displays a long toast message (2.5 seconds), requires a string value
    showToastLong : function(message) {
        $ionicLoading.show({
            template: message,
            duration : 2500
        });
    }
};

return displayMessage;

这是我的控制器(我调用代码,只是错误回调):

.error(function(data, status, headers, config) {
            // If details checked client side, but service returns error code
            if (status === 400 && !(loginInfo.username.$invalid || loginInfo.password.$invalid)) {
                errorMessage = 'Incorrect Username or Password';
            } else if (status === 500) {
                errorMessage = 'Could not connect to server';
            }

            console.log("FAILED LOGIN" + errorMessage);
            displayMessage.hideLoadingComplex(errorMessage);
        });

所有代码都会在我显示消息之前触发控制台,但是消息永远不会显示。任何人都可以帮我解决这个问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您不应该使用$ionicLoading来显示Toast消息。相反,我建议你使用$ionicPopup。它可以完全定制,以满足您的需求。

此外,您可以通过创建两个服务来更好地组织它,例如LoadingServiceErrorDisplayService。然后,您可以直接从控制器中使用它们。你可以做点什么

LoadingService.show();
$http.get(...).success(function(data){
      LoadingService.hide();
      ErrorDisplayService.show(data);
}).
error(function(){
      LoadingService.hide();
})
祝你好运!