AngularJS:在大型项目上重用控制器功能

时间:2015-09-02 10:04:02

标签: angularjs service controller

我需要您关于AngularJS大型应用程序最佳实践的帮助,并一次又一次地重用控制器功能。

我已经遵循了最佳实践(John Papa,Todd Motto,......)但是我被困在一个特定的事情上。

我将举例说明我的问题。

让我们假设我们有一个成员应用程序,我们希望允许成员阻止/解除阻止。他们可以在三个视图上阻止其他用户(带有按钮的用户个人资料,阻止用户页面输入用户名以及带有某种弹出窗口的信使页面)。

我们创建一个服务来处理所有被阻止的方法(block,unblock,...),这个服务直接链接到Api。

我关心的是控制器:

function blockUser(userId) {
  Popup.show('Are you sure you want to block this user?').then(function () {
    BlockService.blockUser(userId).then(function () {
      // Do things
      $state.go('blocked-users');
    });
  });
}

这里我们要显示一个Popup,询问用户是否确定要阻止其他用户。如果他说是,Popup会解决,我们会阻止其他用户。 当Api方法结算时,我们会执行诸如将用户重定向到被阻止用户列表之类的操作。

对于三个视图及其控制器,它一次又一次完全相同。

我可以看到只有一次写这个函数的3个解决方案:

1)在RootScope中定义它(但这是一个不好的做法)

2)在服务上移动此代码(但显示Popup并在服务中重定向用户感觉很奇怪,但也许这是最好的解决方案)

3)当我们使用块方法时,创建一个全局BlockController并将其直接粘贴到模板上(但声明相同的ng-controller X次感觉不对)

处理此类案件的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

看来你最好的选择很可能就是服务。服务的好处是可以从任何控制器访问,并且易于更改/更新。 如果每个控制器都有一个单独的功能,那么每次进行更改时都必须更换每个控制器,并且很难保持清洁。最后尽量避免使用rootScope,这被认为是不好的做法,这绝对不是你需要Root访问的情况。