Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 依赖于$ionicPopup的共享函数?_Angularjs_Ionic Framework - Fatal编程技术网

Angularjs 依赖于$ionicPopup的共享函数?

Angularjs 依赖于$ionicPopup的共享函数?,angularjs,ionic-framework,Angularjs,Ionic Framework,我想在ionic中创建消息框的自定义版本。该函数使用$ionicPopup $myShowPopup = function() { $scope.data = {}; $ionicPopup.show({ subTitle: 'There is no network connection right now.', scope: $scope, buttons: [ { text: 'Got it' type: 'button clear'}, ]

我想在ionic中创建消息框的自定义版本。该函数使用
$ionicPopup

$myShowPopup = function() {
 $scope.data = {};
 $ionicPopup.show({
   subTitle: 'There is no network connection right now.',
   scope: $scope,
   buttons: [
     { text: 'Got it' 
     type: 'button clear'},
   ]});
}
我需要在多个地方调用该函数,例如,在下面的app.js代码中。应该在哪里定义

angular.module('app', ['ionic', 'app.controllers', 'app.routes', 'app.services', 'app.directives'])
.run(function ($ionicPlatform, $ionicPopup) {
    $ionicPlatform.ready(function () {
        ......
        // Need to call it here
        ......
})
.config(function ($resourceProvider) {
    angular.forEach($resourceProvider.defaults.actions, function (action) {
        action['interceptor'] = {
            responseError: function (httpResponse) {
                ......
                // And here.
                ......
            }
        };
    })
});

听起来像是使用
服务的最佳实践。但是,要依赖于
app.config()
阶段中定义为
提供者的
服务,还需要进行一项黑客攻击

在线演示-


为这个函数创建一个工厂,只要在需要这个函数的地方注入并调用这个函数。另一个更好的解决方案是为弹出窗口创建一个指令。您可以轻松地重用它。

我认为围绕
$ionicPopup
编写一个包装器是个好主意。这样,提供默认值应该非常容易,甚至可以替换这些默认值。另外一个优势在于,如果您需要的话,可以很容易地用另一个弹出式实现交换
$ionicPopup

编写这样一个包装器的最佳方法是创建一个角度
服务

angular.module('myPopup', ['ionic', '_'])
.service(function ($ionicPopup) {
    var service = {
        showPopup: showPopup
    }
    return service;

    function showPopup(options) {
        var settings = _.defaultsDeep(options, {
            subTitle: 'There is no network connection right now.',
            buttons: [
                { 
                    text: 'Got it' 
                    type: 'button clear'
                },
            ]
        });

        $ionicPopup.show(settings);
    }
})
正如你所看到的,我正在使用。这很有用,因为您可以为showPopup提供自己的选项,或者在没有提供选项的情况下默认为其他选项

您可以通过执行以下操作在任何需要的地方调用弹出窗口:

myPopup.showPopup();
可以添加您自己的选项,因此如果您想覆盖字幕,请执行以下操作:

var options = {
    subTitle: 'my custom subtitle'
};

myPopup.showPopup(options);

不能将其注入
app.config()
阶段,非常确定OP需要显示一条关于ajax故障和一般故障的交互式消息,并且想要重新使用
showMessage
功能。感谢Jossef的纠正。但是指令可能是更好的解决方案。我看到Jossef Harush关于您希望在配置阶段显示弹出窗口这一事实的有效评论。我想如果你能在我的解决方案(尤其是DefaultsDep)和他的提供商方法之间进行混合,那将是最好的。我在电话上试过了。但是,它会在每次webapi调用时弹出消息,并且没有收到任何数据?谢谢。然而,它仍然在开始时弹出一次?我删除了它。消息仍然显示。状态代码为0。可能是因为http失败。要检测原因-请检查服务器日志或使用http调试器(如fiddler)并进行调查,以了解接收http错误响应的原因。我明白了。我认为代码中一些不重要的http调用出现了404错误。我应该只捕获ngResource调用的错误。也许我应该为它提出一个新问题。
var options = {
    subTitle: 'my custom subtitle'
};

myPopup.showPopup(options);