【问题标题】:How to call other functions of same services in ionic (angular.js)如何在ionic(angular.js)中调用相同服务的其他功能
【发布时间】:2015-08-25 11:58:17
【问题描述】:

我正在使用 ionic 框架开发移动应用程序。我已经创建了一个像这样的通用实用程序服务

 .service('CommonUtilityService', function($q) {
        return {
            parseJsonDate:function(jsonDate){
                var offset = new Date().getTimezoneOffset() * 60000;
                var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);

                if (parts[2] == undefined)
                    parts[2] = 0;

                if (parts[3] == undefined)
                    parts[3] = 0;

                return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000);
            },
            daysBetween:function(date1String, date2String){
                var ONE_DAY = 1000 * 60 * 60 * 24;
                var ONE_MINUTE = 1000 * 60;

                var d1 = new Date(date1String);
                var d2 = new Date(date2String);
                var d1_ms = d1.getTime() - d1.getTimezoneOffset() * ONE_MINUTE;
                var d2_ms = d2.getTime() - d2.getTimezoneOffset() * ONE_MINUTE;

                return Math.floor(d1_ms - d2_ms/ONE_DAY);
            },
            getNumberOfDays:function(jsonDate){
               // var date = parseJsonDate(jsonDate);
                var date = new Date();
                var today = new Date();
                return this.daysBetween(today,date);
            }
        }
    })

当我试图在 getNumberOfDays 函数中调用 daysBetween 函数时,它给出了错误

this.daysBetween is not a function

谁能告诉我如何在 getNumberOfDays 函数中调用 daysBetween 函数。

【问题讨论】:

  • 试试这个 CommonUtilityService.daysBetween(today,date)
  • 已经尝试过但没有用。它给了 CommonUtilityService 未定义错误。
  • 试试这个:像这样在你的函数中创建一个变量:var selfFunction = this;并返回 selfFunction.daysBetween(today,date);
  • 已经试过但同样的错误。
  • 你是怎么调用getNumberOfDays函数的?

标签: javascript angularjs ionic-framework ionic angularjs-service


【解决方案1】:

其实Service doesn't return a object where Factory return an object。您可以尝试像这样重构服务

服务

服务是一个构造函数,它使用 新关键字。您可以向服务对象添加属性和功能 通过使用 this 关键字。不像工厂,它不会返回 任何东西(它返回一个包含方法的对象)。

代码

 .service('CommonUtilityService', function($q) {
     var CommonUtilityService = this;
     CommonUtilityService.parseJsonDate = function(jsonDate) {
         var offset = new Date().getTimezoneOffset() * 60000;
         var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);

         if (parts[2] == undefined)
             parts[2] = 0;

         if (parts[3] == undefined)
             parts[3] = 0;

         return new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
     }
     CommonUtilityService.daysBetween = function(date1String, date2String) {
         var ONE_DAY = 1000 * 60 * 60 * 24;
         var ONE_MINUTE = 1000 * 60;

         var d1 = new Date(date1String);
         var d2 = new Date(date2String);
         var d1_ms = d1.getTime() - d1.getTimezoneOffset() * ONE_MINUTE;
         var d2_ms = d2.getTime() - d2.getTimezoneOffset() * ONE_MINUTE;

         return Math.floor(d1_ms - d2_ms / ONE_DAY);
     }
     CommonUtilityService.getNumberOfDays = function(jsonDate) {
         // var date = parseJsonDate(jsonDate);
         var date = new Date();
         var today = new Date();
         return CommonUtilityService.daysBetween(today, date);
     }
 })

【讨论】:

  • @NeelKamal 看看添加的链接..这将使您更好地了解服务和工厂
  • @NeelKamal 干杯.. 编码快乐 :)
【解决方案2】:

您正在使用模式三:混合/立面,因此在此您必须使用 this 正如@pankajparkar 所解释的那样

    .service('CommonUtilityService', function($q) {

               var parseJsonDate = function(jsonDate){
                    var offset = new Date().getTimezoneOffset() * 60000;
                    var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);

                    if (parts[2] == undefined)
                        parts[2] = 0;

                    if (parts[3] == undefined)
                        parts[3] = 0;

                    return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000);
                },

               var getNumberOfDays = function(jsonDate){
                   // var date = parseJsonDate(jsonDate);
                    var date = new Date();
                    var today = new Date();
                    return this.daysBetween(today,date);
                }
               return {
                 parseJsonDate:  parseJsonDate,
                 getNumberOfDays:  getNumberOfDays
                }
 })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多