更好地组织AngularJS模型服务代码

时间:2016-06-21 00:20:33

标签: javascript angularjs coding-style angular-services

我正在尝试开发“模型”服务,以使我的控制器之间的共享数据保持同步。 我最终得到了这个解决方案:

myApp.factory('UserService', function() {
  return {
    data: {
      user: {
        vm: {
          firstName: '',
          lastName: ''
        },
        save: function() {
            console.log("save user");
        }
      },
      settings: {
        vm: {
          theme: '',
          language: '',
          currency: ''
        },
        save: function() {
            console.log("save user settings");
        }
      },
      save: function() {
        console.log("save all");
      }
    }
  };
});

(这里为了更好地理解它是如何工作的:http://jsfiddle.net/n36kpuf6/)。

我认为这不是一个糟糕的解决方案,它让我的HTML保持整洁,我可以一眼就看出我可以在控制器中使用哪些功能,让它们保持苗条;我更喜欢基于事件或范围的其他数据共享解决方案...

与此同时,我想,也许,它有点困惑;所以我通过John Papa风格指南搜索我如何更好地组织它,但我找不到关于这种“模型”服务的例子,只是基于方法的简单服务...所以我最终认为我想念东西。

有人可以就如何更有条理地保持这项服务给我建议吗?

2 个答案:

答案 0 :(得分:0)

为什么将函数放在对象中?为什么不检索一个干净的对象:

myApp.factory('UserService', function() {
  return {
    data: {
      user: {
          firstName: '',
          lastName: ''
      },
      settings: {
          theme: '',
          language: '',
          currency: ''
      }
    }
  };
});

答案 1 :(得分:0)

我最终得到了这个解决方案:

myApp.factory('UserService', function() {
  var service = {
      user: {
        vm: {},
        save: saveUser
      },
      settings: {
        vm: {},
        save: saveSettings
      },
      save: saveAll
  };

  return service;

  function saveUser() {
    console.log("save user");
    console.log(service.user.vm);
  }

  function saveSettings() {
    console.log("save user settings");
    console.log(service.settings.vm);
  }

  function saveAll() {
    console.log("save all");
    console.log(service);
  }
});

(小提琴:http://jsfiddle.net/tudev0xc/

我认为它仍然具有多功能性和可读性。

相关问题