2014-11-23 39 views
1

我正在重構我正在編寫的Web應用程序,並想將控制器移到工廠中(如果可能的話,正確的結構),以便我可以將它包含在我的不同控制器中應用程序。我似乎無法包圍我的頭如何使用$超時。我想通過在偏移量中傳遞一個函數來刪除多餘的代碼。

強制性:我是AngularJS的新手。

App.controller('TimeCtrl', ['$scope','$timeout', function($scope, $timeout){ 
    // Set and update clocks 
    var update = function(){ 
     $scope.est_time = moment.utc().add(-5, 'hours').format('h:mm:ss A'); 
     $scope.cst_time = moment.utc().add(-6, 'hours').format('h:mm:ss A'); 
     $scope.cet_time = moment.utc().add(+1, 'hours').format('h:mm:ss A'); 
     $scope.ist_time = moment.utc().add(+5.5, 'hours').format('h:mm:ss A'); 
     $timeout(update, 1000); 
    }; 
    update(); 
}]); 

是否有可能進入工廠這讓我最終能使用在我看來{{Time.getTime(-5)}}?或者甚至只在控制器中使用Time.getTime()

我想出這個。雖然它的工作原理,我不知道如何納入$timeout功能。

App.factory('Time', ['$timeout', function($timeout){ 
    return { 
     getTime: function (tz){ 
      return moment.utc().add(tz, 'hours').format('h:mm:ss A'); 
     } 
    }; 
}]); 

謝謝!

回答

0

工廠返回原生js對象。以上return可以寫任何功能。嘗試一下。

App.factory('Time', ['$interval', function($interval){ 
    var utc; 
    $interval(function() { 
     utc = moment.utc(); 
    }, 1000); 

    return { 
     getTime: function (tz){ 
      return utc.add(tz, 'hours').format('h:mm:ss A'); 
     } 
    }; 
}]); 

我想補充上面的內容。過濾器存在於Angular中。過濾器轉換數據:獲取數據模型並返回格式化數據。也許,你需要它。更多信息:https://docs.angularjs.org/api/ng/filter

+0

這似乎並不像我想要的那樣持續更新。渲染後該方法是否被破壞? – Randy 2014-11-23 03:30:13

+0

@Randy,爲什麼不連續?請參閱[jsfiddle](http://jsfiddle.net/Fenex/c941g14g/)。工廠一直活到你的應用程序還在 – Fenex 2014-11-23 12:35:01

+0

感謝jsfiddle。我發現我的問題。時刻是一種痛苦。 – Randy 2014-11-23 23:41:46