如何在工厂中移动控制器代码

时间:2016-12-26 09:22:32

标签: javascript angularjs

我的控制器中有一些代码,但代码是可重用的..所以我想在工厂中移动它然后每次我需要时使用工厂...我无法将此代码移动到工厂..如果我移动它,任何东西都不行了。这里是我在控制器中的代码,我想在工厂中移动:

var factoryApp = angular.module('clock.factories');
    factoryApp.factory('timerFactory',[
        function() {

          var timerFactory = {};
          var framework7App = new Framework7();
          var $$ = Dom7;
          var today = new Date();
          var arr,hour, minutes, seconds,convertedSec;

            timerFactory.picker = function() {
                framework7App.picker({
                  input: '#picker-date',
                  container: '#picker-date-container',
                  toolbar: false,
                  rotateEffect: true,

                  value: [today.getHours(), (today.getMinutes() < 10 ? '0' + today.getMinutes() : today.getMinutes()), today.getSeconds()],
                  onOpen: function(p){
                  },
                  formatValue: function (p, values, displayValues) {
                    arr = displayValues[0] + ':' + values[1] + ':' +values[2];
                    hour = displayValues[0];
                    var  arrVal = arr.split(":");
                    convertedSec = (+arrVal[0] * 60 * 60 +(arrVal[1]) *60 +(+arrVal[2]));
                    minutes = values[1];
                    seconds = values[2];
                    return arr;
                  },
                  cols: [
                    // Hours
                    {
                      values: (function () {
                        var arr = [];
                        for (var i = 0; i <= 23; i++) { arr.push(i); }
                        return arr;
                      })(),
                    },
                    // Divider
                    {
                      divider: true,
                      content: ':'
                    },
                    // Minutes
                    {
                      values: (function () {
                        var arr = [];
                        for (var i = 0; i <= 59; i++) { arr.push(i < 10 ? '0' + i : i); }
                        return arr;
                      })(),
                    },
                    // Divider
                    {
                      divider: true,
                      content: ':'
                    },
                    // Seconds
                    {
                      values: (function () {
                        var arr = [];
                        for (var i = 0; i <= 59; i++) { arr.push(i < 10 ? '0' + i : i); }
                        return arr;
                    })(),
                  },
                ]
              });
                }
            return timerFactory;
        }]);

我使用了以下工厂方法:

jQuery("#btnadd2").click(function() {
    var qty;
    var allVals = [];
    var nameatt = jQuery("#txtAttendeeNames").val();
    var nameatt= jQuery("#txtAttendeeNames").val();
    var emattendee= jQuery("#txtAttendeeEmails").val();
    var eventname = jQuery("#hdEventName").val();
    var eventlocation = jQuery("#hdLocation").val();
    jQuery(".big:checked").each(function() {
        qty = parseInt(jQuery(this).parents().nextAll().children().find('input[name="quantity"]').val());
        if (jQuery.inArray(jQuery(this).val(), allVals) == -1) {
            allVals.push(jQuery(this).val()); //not present in array     
        } else {
            qty = parseInt(jQuery(this).parents().nextAll().children().find('input[name="quantity"]').val() + 1);
        }
    });
    for (var i = 0; i < allVals.length; i++) {
        var rslt = allVals.join(',' + qty + ',' + 'custcol_name_of_attendees|' + nameatt + '||custcol_email_o f_attendees|' + emattendee + '||custcol_event_name|' + eventname + '||custcol_event_location|' + eventlocation + ';');
        rslt1 = jQuery('#txtCntNameReg').val(rslt);
        console.log(rslt1);
    }
});

成功调用了picker方法,但无法在工厂中编写其他方法($ scope方法)。任何人都可以指导我如何做到这一点,因为我是angularJS的新手。 另请告诉我,如何将工厂的变量(即小时,秒,分钟)用于控制器? 它也不允许我使用$ scope和$ interval。

1 个答案:

答案 0 :(得分:1)

  

没有不允许的$ interval

要在工厂中使用$interval服务,只需将其注入工厂构造函数:

app.factory("timerFactory", function($interval) {
                     //inject here   ^^^^^^^^^^
    var timer = {};
    timer.count = 0;
    var intervalPromise;
    timer.start = function() {
        if (intervalPromise) return;
        intervalPromise = $interval(()=>(timer.count++), 1000);
    };
    timer.stop = function() {
        $interval.cancel(intervalPromise);
        intervalPromise = null;
    };
    return timer;
});

DEMO on JSFiddle