AngularJS Перехват и расширение контроллера $scope
Существует много функций многократного использования, которые я определил в своем приложении, которые использует контроллер EVERY с переменной $scope. Вместо того, чтобы мне каждый раз создавать общую службу, есть ли способ расширить переменную $scope, чтобы я мог повсюду иметь расширенный код?
Что-то вроде:
//I've tested this out and it doesn't work, but this is what I want to do.
angular.module('App',[]).config(['$scopeProvider',function($scope) {
$scope.method1 = function() { ... };
$scope.method2 = function() { ... };
}]);
Затем позже:
var HomeCtrl = function($scope) {
$scope.method1();
};
Возможно ли это? Или мне нужно создать общую услугу, а затем расширить область действия $для первой строки каждого контроллера?
Ответы
Ответ 1
Вместо .config
попробуйте .run
, это будет делать именно то, что вы хотите.
angular.module('App', []).run(['$rootScope', function($rootScope) {
$rootScope.foo = function() {
alert("WIN!");
};
}]);
angular.module('App').controller('HomeCtr', ['$scope', function($scope) {
$scope.foo(); #will call the alert
}]);
ПРИМЕЧАНИЕ Я использовал module.controller
только потому, что мне нравится, var HomeCtrl = function($scope) {
будет иметь тот же эффект.