我正在尝试在工厂内使用$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
,因为相同的代码在控制器中工作正常,我想知道这是否意味着在控制器内工作。如果是这样,我的问题是如何避免在项目中使用相同的代码进行消息框。
答案 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 } );
}
}
};
})