【问题标题】:AngularJS Clock Factory, $timeout woesAngularJS 时钟工厂,$timeout 问题
【发布时间】:2014-11-23 00:16:44
【问题描述】:

我正在重构我正在编写的 Web 应用程序,并希望将控制器移入工厂(如果可能是正确的结构),以便我可以将它包含在整个应用程序的不同控制器中。我似乎无法理解应该如何使用 $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();
}]);

是否可以将其移至工厂以便我最终可以在我看来使用{{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');
        }   
    };
}]);

谢谢!

【问题讨论】:

    标签: javascript angularjs web-applications


    【解决方案1】:

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

    【讨论】:

    • 这似乎并没有像我想要的那样持续更新。方法渲染后会被销毁吗?
    • @Randy,为什么不继续呢?见jsfiddle。工厂一直存在,直到您的应用程序存在为止。
    • 感谢 jsfiddle。我发现了我的问题。那一刻是痛苦的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多