2014-09-19 2 views
8

У меня есть некоторые контроллеры с некоторым общим кодом, в частности $scope.$watch, который идентичен для нескольких контроллеров. Как я могу поместить этот код в отдельный файл и импортировать общий код в различные контроллеры, которым это необходимо $watch?Контроллеры AngularJS: переместить общий код в отдельный файл

+0

может обслуживать работу для этого? – worldask

+0

Я уверен, что область действия в сервисе невозможна ... – EricC

+0

@EricC $ scope будет просто параметром для сервисной функции. – cgTag

ответ

7

Вы могли использовать службу, передав в сферу вашего контроллера:

angular.module('app').service("CommonFunctions", ['SomeService', function(SomeService) { 
    var commonFunctions = {}; 
    commonFunctions.init = function(scope){ 
     scope.$watch(function(){},function(){}) 
    }; 
    return commonFunctions; 
}]); 

angular.module('app').controller('Ctrl1', 
['$scope','CommonFunctions',function($scope,CommonFunctions) { 
    CommonFunctions.init($scope); 
}]); 

angular.module('app').controller('Ctrl2', 
['$scope','CommonFunctions',function($scope,CommonFunctions) { 
    CommonFunctions.init($scope); 
}]); 

Таким образом, вы используете рамки отдельного контроллера, но используя общий метод в качестве службы. Вы также можете использовать angular.extend($scope, AService) в контроллере, если вы хотите, чтобы общая функциональность была фактически добавлена ​​к областям контроллера.

Вот рабочий Fiddle: http://jsfiddle.net/rhcjdb7L/

Конечно, это очень здорово и все, но вы уверены, что вы не хотите использовать $rootscope.$broadcast()? Это довольно хорошо написано: http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/

+0

Я не вижу смысла расширения $ scope. У вас уже есть услуга. Просто вызовите 'CommonFunctions.init ($ scope)' – cgTag

+0

Вы правы, 'extend()' в этом случае переполняется, так как вам не нужна эта функция в $ scope по какой-либо причине. Я пересмотрел свой ответ. –

+0

Спасибо, ребята :) – EricC

Смежные вопросы