【问题标题】:Better organize AngularJS model-service code更好地组织 AngularJS 模型服务代码
【发布时间】:2016-06-21 00:20:32
【问题描述】:

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

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 保持整洁,而且我一眼就能看出我可以在控制器中使用哪些功能,从而保持它们的纤细;在其他基于事件或 $scope 的数据共享解决方案中,我更喜欢它...

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

有人可以就如何更好地组织这项服务给我一些建议吗?

【问题讨论】:

  • “也许,有点糊涂” ...为什么?控制器应该是精益的,服务应该有尽可能多的业务逻辑。
  • 好吧..我有相同结构的模型和功能;如果我的函数充满“真实”代码,它们会变得很长,并且整个结构不那么可读。
  • 将函数写为对象下方的命名函数,然后将函数引用传递给您的 data 对象
  • 是的......我也在想同样的事情......还有什么别的吗?

标签: javascript angularjs coding-style angular-services


【解决方案1】:

为什么要把函数放在你的对象里面?你为什么不只检索一个干净的对象:

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

【讨论】:

  • 因为每当我在控制器中继承服务时,我都会得到模型本身及其功能。例如...我获取用户数据及其功能以将其保存到后端。
【解决方案2】:

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

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/

我认为它仍然具有通用性和可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多