具有相同逻辑的两个AngularJS控制器

具有相同逻辑的两个AngularJS控制器,angularjs,controller,Angularjs,Controller,我有两个div,每个div都需要一个控制器来处理其中的活动。当然,两个控制器的名称不同 这种情况是有问题的,因为它需要对两段相同的代码进行维护 我在考虑两种选择,并征求意见: 将通用代码部署到单独的文件中,并使用jQuery将该文件包含到两个控制器中 创建一个新文件,其中包含一个函数,该函数将接收与控制器相同的参数,并包含两个控制器中当前托管的整个逻辑。然后,只需从两个控制器中调用此函数 在第二个选项中,控制器的主体将变成一条语句,即调用新函数 从我找到的帖子来看,第一个选项似乎确实有效。我的问

我有两个div,每个div都需要一个控制器来处理其中的活动。当然,两个控制器的名称不同

这种情况是有问题的,因为它需要对两段相同的代码进行维护

我在考虑两种选择,并征求意见:

  • 通用代码部署到单独的文件中,并使用jQuery将该文件包含到两个控制器中

  • 创建一个新文件,其中包含一个函数,该函数将接收与控制器相同的参数,并包含两个控制器中当前托管的整个逻辑。然后,只需从两个控制器中调用此函数

  • 在第二个选项中,控制器的主体将变成一条语句,即调用新函数

    从我找到的帖子来看,第一个选项似乎确实有效。我的问题是(在我进行重大更改和测试之前):第二个选项也会起作用吗?如果是的话,它比第一个更好、相等还是更差

    编辑 尽管如前所述,实际代码与我的问题无关,但我添加了一组示例来说明我的问题,尤其是第二个选项

    以下是初步安排:

    控制器1

    myApp.controller("First_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       $scope.Do_Something = function () {
          // some code here
       }
    
    }
    
    控制器2

    myApp.controller("Second_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       $scope.Do_Something = function () {
          // some code here
       }
    
    }
    
    想法是将其转换为:

    控制器1-新的

    myApp.controller("First_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       Common_Function($rootScope , $scope) ;
    
    }
    
    myApp.controller("Second_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       Common_Function($rootScope , $scope) ;
    
    }
    
    控制器2-新的

    myApp.controller("First_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       Common_Function($rootScope , $scope) ;
    
    }
    
    myApp.controller("Second_Controller", "$rootScope", "$scope" , [function($rootScope , $scope) {
    
       Common_Function($rootScope , $scope) ;
    
    }
    
    其中:

    Common_Function = function ($rootScope , $scope) {
    
       $scope.Do_Something = function () {
          // some code here
       }
    
    }
    

    你能发布控制器代码吗?如果看不到您正在做什么,很难进行评论,但一般来说,做这类事情的方法是将公共代码放入服务中,并将服务注入控制器中。您还可以使用ES6类,定义一个具有共享行为的公共控制器类,然后将其子类化。谢谢@MikeFeltman。事实上,代码的细节在本文中并不重要。我想的是做一些行为像包含但实际上不包含任何内容的事情的概念。看见通过向函数传递与控制器相同的参数(主要是
    $scope
    ),无论代码在控制器中执行什么操作,如果它包含在被调用的函数中,则执行的操作基本相同。好。。。这就是我所想的,问题是:这有意义吗?与人们争论代码意味着你对答案不感兴趣。如果你问了一个问题,并假设某人可能比你更了解这个问题,你必须相信他们的意见(即使你不相信,也有关于这个问题的规则)。如果有代码可以说明你的情况,请张贴出来,不要让回答者乞求。用文字描述代码是行不通的。亲爱的@estus,首先,我重新阅读了我的评论,甚至找不到“论点”的暗示。第二,我在这里发帖的事实应该会激发这样一种假设,即我确实欣赏周围有人比我更了解这一事实。第三点(也是最后一点),请检查我所做的编辑,(至少我希望)你可能会同意我关于实际代码无关性的观点。啊,所以控制器并不是完全相同的,就像你之前所说的那样。授权给单一职能部门是您认为最好的解决方案。更好的解决方案是,IMHO是两个继承基类的控制器类。或具有属性whoAmI的组件。