Динамическое внедрение службы в angular.js

0

Я использую 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. Это возможно?

Моя структура приложения такова: у меня есть основное приложение и некоторые виджеты, которые можно прикреплять к странице, но на каждой странице есть разные виджеты, тогда мне также нужно вложить соответствующие виджет-сервисы в мой основной модуль. У меня есть один основной модуль и один главный контроллер, и многие службы внутри других контроллеров. и каждая страница имеет собственные виджеты и контроллер. в главном контроллере я должен видеть, какие виджеты загружаются, а затем внедрять его службу

Теги:
dependency-injection

1 ответ

0
Лучший ответ

Вы можете вводить только тогда, когда вам нужна услуга.

Вот контроллер, где у вас есть введенная услуга

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

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

  • 0
    Да, но у меня есть один основной модуль и один главный контроллер, и много служб внутри других контроллеров. и у каждой страницы есть свои виджеты и контроллер. в главном контроллере я должен увидеть, какие виджеты загружаются, а затем внедрить его сервис
  • 0
    Вы можете редактировать свой вопрос с помощью структуры каталогов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню