Я использую Angular.js
Services
для обмена некоторыми данными между такими контроллерами:
var mainApp = angular.module("mainApp", []);
mainApp.service('CalcService', function(){
this.square = function(a) {
//do something
}
});
mainApp.controller('CalcController', function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
Он работает, но, как вы можете видеть, в контроллере мне приходится вводить CalcService
и использовать его внутри моего контроллера. Моя проблема заключается в том, что у меня много сервисов, и на некоторых страницах моего приложения мне нужно вводить зависимость службы, а на некоторых страницах мне не нужно! если я пишу его там, на страницах, которые мне не нужны, я получаю ошибку, потому что мой контроллер находится внутри другого файла, и я не загружал его. Как я могу преодолеть это?
Я хочу, чтобы я мог установить эту инъекцию в некоторых случаях. Мне нужен оператор If Else. Это возможно?
Моя структура приложения такова: у меня есть основное приложение и некоторые виджеты, которые можно прикреплять к странице, но на каждой странице есть разные виджеты, тогда мне также нужно вложить соответствующие виджет-сервисы в мой основной модуль. У меня есть один основной модуль и один главный контроллер, и многие службы внутри других контроллеров. и каждая страница имеет собственные виджеты и контроллер. в главном контроллере я должен видеть, какие виджеты загружаются, а затем внедрять его службу
Вы можете вводить только тогда, когда вам нужна услуга.
Вот контроллер, где у вас есть введенная услуга
mainApp.controller('CalcController',['$scope','CalcService',function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
}]);
Вот контроллер, в котором у вас нет введенной услуги
mainApp.controller('Calc2Controller',['$scope',function($scope) {
$scope.square = function(n) {
$scope.result = n * n;
}
}]);
Редактировать 1
Похоже, что у вас есть службы и контроллеры в одних и тех же файлах. Это что-то не так.
Вы можете видеть данные об общих ресурсах служб во всем мире или инкапсулировать логику, которая может быть использована повторно. В то время как контроллер сосредоточен на конкретном шаблоне.
Я предлагаю вам разделить свои службы и контроллер, используя эту структуру.
App--
-components
-features
- login
-loginController.js
-login.html
-services
- userService.js
- loginService.js
-libs
- bootstrap.js
- lodash.js
Поскольку ваши службы теперь независимы, вы можете поделиться ими с любым контроллером. Вы можете выбирать, где использовать одну услугу, а где нет.