我在nodeJS服务器上设置了一个简单的配置页面。

4个输入字段,用于存储一些IP。

这些字段必定要

var formApp = angular.module('formApp', [])
.controller('formController', function($scope) {
    $scope.formData = {};
    loadConfig();
    $scope.$watchCollection('formData',function() {
        saveConfig($scope);
    });
});


模型中的每个更改都会调用saveConfig(),它将配置保存在服务器上:

function saveConfig($scope) {
    socket.emit('save_config', {config: $scope.formData});
}


这似乎有效。服务器正确打印接收到的对象的内容,并且保存过程中没有错误。

现在,每次打开页面时,我想将配置加载到有角模型中。

loadConfig()告诉服务器加载config.json,解析它,并将其发送到浏览器:

socket.on('load_config', function(data) {
    console.log("[INFO] Config received:");
    angular.element(document.getElementById('config')).scope().formData = data;
});


但它似乎不起作用..在页面刷新时,所有字段均为空。

此外,$ scope.formData = {};清空对象,因此配置将立即被覆盖。我该如何预防呢? (我不知道这是否真的是整个问题)
我的方法有什么严重错误吗?

谢谢

更新:

似乎不是完全错误的...
刷新后,输入为空,但是如果我开始输入和console.log formData对象,它似乎已经以一种奇怪的嵌套方式加载了值

{"config":{"config":{"config":{"config":{},"ip2":"tzfrzftztrf","ip3":"ztu6tzzt6"},"ip2":"hhhkkizbi"},"ip2":"hhkkkkööö"},"ip3":"h"}


这是4次刷新。所以它似乎可以以某种方式工作,但无法正确加载

最佳答案

您可以创建用于加载配置的服务,然后将其注入模块

var formApp = angular.module('formApp', [])
formApp.service('LoadConfigService', function($http) {
   return({
      loadConfig: function() {
      var promise = $http.get('config.json').then(function (response) {
        return response.data;
      });

      return promise;
    }});
});
.controller('formController', function($scope,LoadConfigService) {
    $scope.formData = {};
    LoadConfigService.loadConfig().then(function(data) {
   //Action After response
  });
    $scope.$watchCollection('formData',function() {
        saveConfig($scope);
    });
});

09-17 15:53
查看更多