2016-12-26 3 views
1

У меня есть код в моем контроллере, но код можно использовать повторно. Поэтому я хотел бы переместить его на завод, а затем использовать фабрику каждый раз, когда мне это нужно ... Я неспособный переместить этот код на завод. Если я его переведу, ничего не работает. Вот код, который я имею в моем контроллере и что я хотел бы перейти на заводе:как переместить код контроллера на заводе

var app = angular.module("clock.app"); 
    app.controller('timer',['$scope','$interval','$timeout','timerFactory', 
    function($scope, $interval,$timeout,timerFactory){ 
    var framework7App = new Framework7(); 
    var $$ = Dom7; 
    $scope.timeList = [ 
     {"hour":0, "minutes":1, "seconds": 6}, 
     {"hour":0, "minutes":3, "seconds": 180}, 
     {"hour":0, "minutes":5, "seconds": 300}]; 

     var today = new Date(); 
     var arr,hour, minutes, seconds,convertedSec; 

     var getStoredList = JSON.parse(localStorage.getItem("timeListDetails")); 
     if(getStoredList !=null){ 
     if(getStoredList.length != 0){ 
      $scope.timeList = getStoredList; 
     }else{ 
      localStorage.setItem("timeListDetails", JSON.stringify($scope.timeList)); 
     } 
     }else{ 
      getStoredList = $scope.timeList; 
     } 
     $scope.timerWithInterval = 0; 


     $scope.startTimerWithInterval = function() { 
     $scope.timerWithInterval = 0; 
     if($scope.myInterval){ 
      $interval.cancel($scope.myInterval); 
     } 
     $scope.onInterval = function(){ 
      $scope.timerWithInterval++; 
     } 
     $scope.myInterval = $interval($scope.onInterval,1000); 
     }; 

     $scope.resetTimerWithInterval = function(){ 
     $scope.timerWithInterval = 0; 
     $interval.cancel($scope.myInterval); 
     } 

     $scope.timeCounterInSeconds= function(seconds) { 
     $scope.startTimerWithInterval(); 
     $timeout(function() { 
      $scope.timeCounter(seconds) 
     }, 1000); 
     }; 

     $scope.timeCounter = function(seconds) { 
     if($scope.timerWithInterval==seconds) { 
      $scope.resetTimerWithInterval(); 
      framework7App.alert('Time Over',''); 
     } 
     else { 
      $timeout(function() { 
      $scope.timeCounter(seconds) 
      }, 1000); 
     } 
     }; 
     $scope.submit = function() { 
     $scope.timeList.push({"hour":hour, 
           "minutes":minutes, 
           "seconds":seconds, 
           "convertedSec":convertedSec, 
           "timeFlag": true}); 
     localStorage.setItem("timeListDetails", JSON.stringify($scope.timeList)); 
     $scope.hidePopup(); 
     }; 

     $scope.displayPopup = function(){ 
     $scope.popupAddTimer = true; 
     } 
     $scope.hidePopup = function(){ 
     $scope.popupAddTimer = false; 
     } 

    timerFactory.picker(); 
}]); 

Я использовал ниже заводским способом:

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; 
     }]); 

успешно называемый метод сборщика, но не в состоянии написать еще методы ($ scope methods) на заводе. Может кто-нибудь, пожалуйста, назовите меня, как это сделать, поскольку я новичок в angularJS. Также дайте мне знать, как использовать переменные с завода (например, час, секунды, минуты) в контроллер? Это также не позволяет мне использовать $ scope и $ interval.

+0

$ интервал инъектируется на заводе; $ scope не используется для инъекций на заводе. – georgeawg

+0

@georgeawg no его не разрешено. –

ответ

1

нет его не допускается $ интервал, а

Чтобы использовать $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.

Смежные вопросы