如何为 2 个不同的视图重用一个控制器?

2024-04-21

我定义了一个控制器,并将其应用于两个有细微差别的视图。

角度代码:

app.controller('MyCtrl', function($scope) {
   $scope.canSave = false;
   $scope.demo = {
      files : [{
         filename: 'aaa.html',
         source: '<div>aaa</div>'
      }, {
         filename: 'bbb.html',
         source: '<div>bbb</div>'
      }]
   }
   $scope.newFile = function(file) {
       $scope.demo.files.push(file);
   }
   $scope.$watch("demo.files", function(val) {
       $scope.canSave = true;
   }, true);
});

View 1:

<div ng-controller="MyCtrl"></div>

View 2:

<div ng-controller="MyCtrl"></div>

示例代码很简单,但是我的实际项目中有很多代码和逻辑。

视图 1 和视图 2 具有几乎相同的功能,仅存在一些差异,但我确实需要在控制器中为每个视图编写一些代码。

我不想为它们创建两个不同的控制器,因为它们具有大部分相同的逻辑。我不想将逻辑移动到服务中以在两个控制器之间共享它,因为该逻辑对于服务来说并不常见。

还有其他方法吗?


在给定的条件下我可能会做类似的事情

function MyCommonCtrl(type){
    return function($scope, $http) {
        $scope.x = 5;

        if(type = 't1'){
            $scope.domore = function(){
            }
        }

        ....
        ....
    }
}

angular.module('ng').controller('Type1Ctrl', ['$scope', '$http', MyCommonCtrl('t1')]);
angular.module('ng').controller('Type2Ctrl', ['$scope', '$http', MyCommonCtrl('t2')]);

Then

<div ng-controller="Type1Ctrl"></div>

and

<div ng-controller="Type2Ctrl"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 2 个不同的视图重用一个控制器? 的相关文章

随机推荐