在AngularJS中创建用户可覆盖的配置系统

阿恩德鲁

我正在使用一个基于angularJS的工具来构建图表,并希望创建一个用户可覆盖的配置系统—即,从一个配置文件加载默认值,如果存在另一个配置文件,则将覆盖默认值。

这是我到目前为止的内容:

angular.module('axisJSApp')
  .provider('configProvider', function () {
    this.$get = function axisJSConfig($http, $q) {
      var defaultConfig = $http.get('default.config.yaml');
      var userConfig = $http.get('config.yaml');

      return $q.all([defaultConfig, userConfig]).then(function(values){
        var defaultConfigYaml = jsyaml.safeLoad(values[0].data);
        var userConfigYaml = jsyaml.safeLoad(values[1].data);
        return angular.extend(defaultConfigYaml, userConfigYaml);
      });
    };
  });

然后在我的控制器中:

angular.module('axisJSApp')
  .controller('MainCtrl', function (configProvider, $scope) {
    configProvider.then(function(appConfig){
      console.dir(appConfig); // Config loaded, everything else happens.
    });
  });

如果default.config.yaml和config.yaml同时存在,则所有这些都可以正常工作。我的问题是,如果config.yaml不存在如何使$ q.all()正常失败

另外,是否有任何方法可以同步加载配置文件,所以我不必将整个控制器包装在.then()?中。

谢谢!

尼科斯(Nikos Paraskevopoulos)

我可以想到的一种config.yaml优雅解决不存在的方法是:

var userConfig = $http.get('config.yaml').then(
    function(response) {
        return response.data;
    },
    function(response) {
        if( response.status === 404 ) {
            response.data = {};
            return response;
        }
        else {
            return $q.reject(response);
        }
    }
);

return $q.all([defaultConfig, userConfig]).... // AS BEFORE

因此,您可以通过返回一个空对象response.data(或任何满足您需求的对象)来手动修复“不存在”的情况

我想不出一种优雅的方式来同步加载配置文件。如果使用ngRoute,则可以使用resolve路由配置(在此处更多信息)在启动之前向控制器提供数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在系统调用中创建用户

在 Laravel 5.8 中创建可公开访问的用户配置文件表

在JupyterHub中创建的默认系统用户的密码

使用 angularjs 在 Firebase 中创建用户

如何从刚刚创建的临时用户配置开始创建默认的系统范围dconf设置?

在系统中创建用户ID的最佳做法是什么?

如何在只读文件系统中创建新用户?

如何在自定义用户配置文件创建表单中正确覆盖保存方法?

覆盖与系统命令同名的用户定义函数

Java中的系统覆盖Keylistener

如何使用 firebase 在 ionic 中创建用户配置文件

在 django 中为用户创建配置文件失败

创建系统覆盖窗口(始终在顶部)

系统中的并发用户

在angularjs中创建可重用模式窗口的最佳方法

在Angular中创建网格系统以使组件覆盖多个分区的想法

覆盖单个git commit的已配置用户

为什么通过“系统设置”>“用户帐户”创建的用户不显示在sudoers中?

使用React创建测验,尝试创建书签系统,用户可以在其中添加测验中的问题

如何在Linux中的所有用户中仅grep用户创建的配置文件?

如何在也可以覆盖onListItemClick的ListFragment中创建可单击对象

如何设置系统日志配置以将日志放置在用户的主目录中?

www-data用户是否已在Linux和Unix系统中预先配置?

快照程序包中的用户可编辑的系统范围配置文件

“ dev”配置覆盖Quarkus中的“ test”配置

如何创建可挂载文件系统?

无法从C中的用户空间在/ proc文件系统中创建新文件。甚至可能吗?

每个用户的默认.ssh / config文件是否会覆盖系统范围内ssh_config中的所有选项?

创建系统计算配置文件