在工厂内使用$ ionicLoading

时间:2015-03-22 12:07:43

标签: ionic-framework

我正在尝试在工厂内使用$ionicLoading。 (我认为将代码放在一个地方而不在每个控制器中重复它是个好主意)

angular.module('<my app>.message', ['ionic'])                                                                                                                                  
   .factory('Message', [function($scope, $ionicLoading){                                                                                                                          

     var messageFactory = {};                                                                                                                                                     

    messageFactory.successMessage = function(message){                                                                                                                           
       $ionicLoading.show({ templateUrl: 'templates/messages/success.html',                                                                                                       
                            noBackdrop: true, duration: 1000 });                                                                                                                  
     }                                                                                                                                                                            
     return messageFactory;                                                                                                                                                       
   }]); 

但问题是我收到此错误Cannot read property 'show' of undefined,因为相同的代码在控制器中工作正常,我想知道这是否意味着在控制器内工作。如果是这样,我的问题是如何避免在项目中使用相同的代码进行消息框。

1 个答案:

答案 0 :(得分:1)

您遇到语法问题(see this for details)。

你没有正确注射。你的代码应该是这样的: .factory('Message', ['$scope', '$ionicLoading', function($scope, $ionicLoading) {

我更喜欢在构建步骤中自动注释我的代码。有关详细信息,请参阅ng-annotate

这是我在浏览器或设备上“烘烤”消息的工厂: 在Cordova中运行时,请显示本地吐司。在Cordova之外,在相同的时间段内显示Ionic popup($ ionicLoading)。 使用Toast插件的API - 消息,持续时间,位置。 不同之处在于:离子弹出窗口忽略了位置,并且在显示时不允许做任何事情。

(需要Toast Plugin

.factory('Toast', function($ionicLoading, $cordovaToast) {
    return {
        show: function (message, duration, position) {
            message = message || "No message given...";
            duration = duration || 'short';
            position = position || 'top';

            if (!!window.cordova) { // Use the Cordova Toast plugin
                $cordovaToast.show(message, duration, position);
            }
            else {
                duration = 2000;
                $ionicLoading.show( { template: message, duration: duration } );

            }
        }
    };
})