2015-07-04 2 views
0

я использую Angular.jsServices поделиться некоторыми данными между контроллерами, как это:Динамическое впрыскивание обслуживание в angular.js

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. Это возможно?

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

ответ

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; 
      } 
    }]); 

Edit 1

It похоже, что у вас есть службы и контроллеры в одних и тех же файлах. Это что-то не так.

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

Предлагаю вам разделить свои услуги и контроллер, используя эту структуру.

App-- 
    -components 
    -features 
      - login 
       -loginController.js 
       -login.html 
    -services 
      - userService.js 
      - loginService.js 
    -libs 
      - bootstrap.js 
      - lodash.js 

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

+0

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

+0

вы можете отредактировать свой вопрос со структурой каталогов – Sushant