2014-06-22 14 views
5

Powiedz, mam następujące kontrolery:Jak uniknąć powielania kodu podczas używania kontrolerów o podobnych metodach?

controller("MyCtrl1", ["$scope", "$sce", "myService", "$location", 
    function ($scope, $sce, myService, $location) { 
     $scope.Resources = window.MyGlobalResorcesObject; 
     $scope.trustedHtml = function (input) { 
      return $sce.trustAsHtml(input); 
     }; 
     $scope.startProcessing = function() { 
      $scope.processingRequest = true; 
     }; 
     $scope.endProcessing = function() { 
      $scope.processingRequest = false; 
      $scope.$apply(); 
     }; 
     //some MyCtrl1-specific code goes here 
    }]). 
controller("MyCtrl2", ["$scope", "$sce", "myService", "$location", 
    function ($scope, $sce, myService, $location) { 
     $scope.Resources = window.MyGlobalResorcesObject; 
     $scope.trustedHtml = function (input) { 
      return $sce.trustAsHtml(input); 
     }; 
     $scope.startProcessing = function() { 
      $scope.processingRequest = true; 
     }; 
     $scope.endProcessing = function() { 
      $scope.processingRequest = false; 
      $scope.$apply(); 
     }; 
     //some MyCtrl2-specific code goes here 
    }]); 

Widzisz, kod jest duplicated.I chcą ponownie wykorzystać wspólny kod.
Jaka jest powszechna praktyka, aby to osiągnąć?

Odpowiedz

8

używać wspólnego usługę:

module.factory('processing', function($sce) { 
    function initialize($scope) { 
     $scope.Resources = window.MyGlobalResorcesObject; 

     $scope.trustedHtml = function(input) { 
      return $sce.trustAsHtml(input); 
     }; 

     $scope.startProcessing = function() { 
      $scope.processingRequest = true; 
     }; 

     $scope.endProcessing = function() { 
      $scope.processingRequest = false; 
      $scope.$apply(); 
     }; 
    } 

    return { 
     initialize: initialize; 
    } 
}); 

a potem w kontrolerach:

controller("MyCtrl1", function($scope, processing) { 
    processing.initialize($scope); 
} 
Powiązane problemy