【问题标题】:Dynamic service injection in angular.jsangular.js 中的动态服务注入
【发布时间】:2015-07-05 13:23:01
【问题描述】:

我使用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 语句。这可能吗?

我的应用程序结构是这样的:我有一个主应用程序和一些可以附加到页面的小部件,但是每个页面都有不同的小部件,那么我也需要在我的主模块中注入适当的小部件服务。我有一个主模块和一个主控制器,以及其他控制器内部的许多服务。每个页面都有自己的小部件和控制器。在主控制器中,我必须查看加载了哪些小部件,然后注入其服务

【问题讨论】:

    标签: javascript angularjs node.js dependency-injection


    【解决方案1】:

    只有在需要服务时才可以注入。

    这是您注入服务的控制器

    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
    

    由于您的服务现在是独立的,您可以与任何控制器共享它们。您可以选择在哪里使用一项服务,在哪里不使用。

    【讨论】:

    • 是的,但我有一个主模块和一个主控制器,以及其他控制器内部的许多服务。每个页面都有自己的小部件和控制器。在主控制器中,我必须查看加载了哪些小部件,然后注入其服务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多