簡體   English   中英

angular.js中的動態服務注入

[英]Dynamic service injection in angular.js

我使用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

由於您的服務現在是獨立的,因此您可以與任何控制器共享它們。 您可以選擇在何處使用一項服務,在何處不使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM