多个控制器使用相同的路由参数和默认值 - 寻找优雅的解决方案

时间:2014-06-11 13:32:17

标签: angularjs

我在AngularJS中构建一个系统,该系统目前有两个控制器(可能更晚一些),它们都需要使用可选的路由参数(日期)。另一个控制器负责设置日期,即更改路径以包括用户选择的日期。

我正在寻找一个干净,优雅的解决方案而不重复代码。

我知道我可以在两个控制器中轻松完成此操作,从路径中获取日期:

$scope.date = typeof ($routeParams.date) != 'undefined' ? $routeParams.date : '<fetch currentdate>';

并且可能让两个控制器都像这样监听$locationChangeStart事件:

$scope.$on("$locationChangeStart", function(...) {
    $scope.date = <fetch from route>
});

但这会涉及一些代码重复。什么是更好/更清洁的解决方案?我想为此创建一个服务/工厂,但也许这有点过头了?

欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

好的,既然我没有对我的问题做出任何回应,我不得不自己做点什么。

这就是我想出的。我创建了一个新的“实用程序”服务,它有一个GetDate方法,它接受一个可选的选定日期:

myAppName.factory('utilities', function () {
    var Service = function () {
        var self = this;

        self.GetDate = function (selectedDate) {
            var date = new Date();
            return (typeof (selectedDate) != 'undefined' ? selectedDate : date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate());
        }
    };

    return new Service();
});

然后我将实用程序服务注入到需要日期的所有控制器中并执行此操作:

$scope.date = utilities.GetDate($routeParams.date);

如果$routeParams.date未定义,我会得到当前日期。否则,我会以我需要的格式获取路由参数中指定的日期。

这看起来很漂亮。唯一的代码重复是上面的行,每个控制器需要一次这样的信息。

随意提出一个更好的方法。