2014-02-06 3 views
1

Скажем, у меня есть завод по имени MyFactory, и я ввожу его в несколько контроллеров. Как я могу получить доступ к области контроллеров внутри фабрики?

Единственный способ, которым я в настоящее время думать о том, как сделать это следующим образом:

app.factory('MyFactory', function() { 

    return function($scope) { 
     myPublicFunc: function() { 
      $scope.$on('$destroy', function() { ... }); 
     } 
    } 

}); 

app.controller('MyController1', ['$scope', MyFactory', function($scope, Myfactory) { 
    var factory = new MyFactory($scope); 
    factory.myPublicFunc(); 
}); 

Но есть ли другой способ, где я могу просто вернуться { } вместо function($scope) { } в MyFactory и использовать завод непосредственно (MyFactory.myPublicFunc) вместо того, чтобы создать новый экземпляр с ключевым словом newи по-прежнему получить доступ к областям $ 1 каждого контроллера?

+1

услуги предназначены для совместного использования между областями и не должны иметь зависимости от области управления. Я не думаю, что есть способ сделать это –

+0

@KhanhTO Пример, который я написал в вопросе, работает, по крайней мере, так. –

+0

Я никогда не говорил об инъекции зависимостей. Я просто хотел получить доступ к области внутри фабрики. Я все еще думаю, что могу тестировать устройство, мне просто нужно издеваться над функциями внутри фабрики, мне не нужна область внутри тестов. Причина * только * Мне нужна область внутри фабрики, чтобы обрабатывать событие destroy, поэтому мне не нужно копировать код во всех контроллерах, которые используют эту конкретную фабрику. –

ответ

0

если вы используете .service вместо .factory вы уже одноэлементный экземпляр в контроллере, как только вы впрыснуть его через DI

, а затем вы можете сделать, например

module.service('myService', function() { 
    return { 
     myPublicFn: function() {} 
    } 
}); 

и

module.controller('myCtrl', function(myService, $scope) { 
    $scope.publicFn = myService.myPublicFn; 
}); 
+0

Я не думаю, что вы поняли мою проблему. Я немного изменил вопрос, чтобы лучше объяснить проблему. –

+0

Я думаю, вы в первую очередь хотели избавиться от создания экземпляра фабрики ... поэтому вы хотите избавиться от инъекций в области - это не очень хорошая идея, как упоминалось в @KhanhTO, службы не должны иметь зависимости от какой-либо области, если она имеет, логика не хорошо разработана, манипуляция видимостью должна оставаться в контроллере – doodeec

+0

Это не совсем манипуляция с областью. Я просто не хочу копировать один и тот же код для каждого контроллера. Мне нужно иметь такое же поведение для события уничтожения области в разных контроллерах. Это единственная причина, по которой я передаю эту область на завод. –

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