javascript - AngularJS Clock Factory,$超时问题

标签 javascript angularjs web-applications

我正在重构我正在编写的 Web 应用程序,并且希望将 Controller 移至工厂中(如果可能是正确的结构),以便我可以将其包含在整个应用程序的不同 Controller 中。我似乎不知道应该如何使用 $timeout。我还想通过在偏移量中传递一个函数来删除冗余代码。

强制:我是 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();
}]);

是否可以将其移至工厂,以便我最终可以在我的 View 中使用 {{Time.getTime(-5)}} ?或者甚至只是 Controller 中的 Time.getTime()

我想出了这个。虽然它有效,但我不确定如何合并 $timeout 功能。

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

谢谢!

最佳答案

工厂返回原生 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

关于javascript - AngularJS Clock Factory,$超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084079/

相关文章:

javascript - 如何从 iframe src 获取哈希值?

javascript - 使用 JQuery 删除动态创建的 Div 时出现问题

angularjs - 如何在 ng-options 中的项目标签上使用 angularJs 过滤器

angularjs - 将简单的Dart代码转换为TypeScript

html - 本地 webapp 可以在 iOS 上运行吗?

c - 无法将C中的模拟放到网页上

javascript - 如何使 javascript 警报不说页面名称?

javascript - Sequelize - 如何搜索多列?

javascript - 如何转义 moment.js 保留字?

javascript - 如何使用跳过参数使用 angular-ui bootstrap 进行服务器端分页?