2015-10-31 85 views
1

我在每個控制器中獲得了以下工作。

$scope.$on('$routeChangeStart', function(event){ 
    $scope.closeitup(); 
}); 

,並在每個控制器我有一個closeitup()功能,做不同的事情,但具有相同的名稱。

我如何可以移動上述$scope.$on到將要發射的服務和呼叫控制器closeitup()

希望這個問題是非常明顯的

+0

你還可以發佈'closeitup()'函數,以便我們可以看到它們之間的區別嗎? –

+0

這是不同的代碼在每個控制器,但作爲一個例子:$ scope.closeitup =函數(){一些$ http調用} – user3052526

回答

0
myModule.factory('closeitupOnRouteChangeStart', function() { 
    return function($scope) { 
    $scope.$on('$routeChangeStart', function() { 
     $scope.closeitup(); 
    }); 
    }; 
}); 

,並在控制器:

myModule.controller('SomeCtrl', function($scope, closeitupOnRouteChangeStart) { 
    closeitupOnRouteChangeStart($scope); 
}); 

雖然我不確定這會使代碼更乾淨和更具可讀性。

+0

它不工作,它說'TypeError closeitupOnRouteChangeStart不是一個函數' – user3052526

+0

對不起,完美 – user3052526

0

怎麼樣使用$控制器繼承?通過SalmanPK

改編自this answer

app.controller('ParentCtrl ', function($scope) { 
    $scope.$on('$routeChangeStart', function(event){ 
    $scope.closeitup(); 
    }); 
}); 

app.controller('ChildCtrl', function($scope, $controller) { 
    $controller('ParentCtrl', {$scope: $scope}); 
}); 
  • 的例子中沒有嘗試過的自己,很抱歉,如果該方法是一種誤導。

+0

我沒有嘗試這個,但我想將代碼移動到一個服務。謝謝,雖然我會研究'$ controller',因爲我不知道它 – user3052526

+0

如果你只是需要封裝某個地方的邏輯,控制器繼承聽起來不錯。 如果不是,請嘗試「JB Nizet」答案,如果它解決了您的問題,請給他接受的狀態。 :d – ElMesa