angularjs - 服务的动态注入(inject)(从 Controller 内部)

标签 angularjs dependency-injection

我想在 Controller 中动态注入(inject)一些依赖项。 我可以使用 $injector 轻松做到这一点,如下所示:

var app = angular.module('app', []);

app.service('serv1', function() {
    var me = this;

  this.welcome = function(str) {
    console.log("Welcome " + str + "!");
  };
});

app.controller('Ctrl', function($scope, $injector) {
  var servMe = $injector.get('serv1');

  $scope.greeting = function() {
    servMe.welcome('Master Obi-wan');
  };
});

但是,假设我有一个巨大的服务 serv1,如果不需要,我不想“膨胀”我的页面。 我想在我的 Controller 中执行此操作(Plunker 提供:http://plnkr.co/edit/Szs4Pg?p=preview)

我面临的错误是$injector似乎不知道新加载的服务。我应该刷新它的缓存还是什么?我应该实例化一个新的吗?

提前非常感谢。

最佳答案

script.js

var app =angular.module('app', ['oc.lazyLoad']);
app.controller('Ctrl', function($scope, $injector,$ocLazyLoad) {
  // But not from inside the controller
  $ocLazyLoad.load('serv1.js').then(function(){
       var servMe = $injector.get('serv1');

  $scope.greeting = function() {
    servMe.welcome('Master Obi-wan');
  };

    });


});

serv1.js

angular.module('app',[]).service('serv1', function() {

  this.welcome = function(str) {
    console.log("Welcome " + str + "!");
  };
});

HTML

<html>

  <head>
    <link data-require="angular.js@1.5.3" data-semver="1.5.3" rel="stylesheet" href="Bootstrap" />
    <script data-require="angular.js@1.5.3" data-semver="1.5.3" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/oclazyload/1.0.9/ocLazyLoad.min.js" ></script>
    <script src="script.js"></script>
  </head>

  <body ng-app="app">
    <div ng-controller="Ctrl">
      <button ng-click="greeting()">Click me!</button>
    </div>
  </body>

</html>

关于angularjs - 服务的动态注入(inject)(从 Controller 内部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36792099/

相关文章:

angularjs - 使用 AngularUI 工具提示延迟 mouseleave 事件

html - 注册流程栏CSS3动画

javascript - 更改范围变量时无法获取范围变量长度

c# - 与 StructureMap 4.6 transient 生命周期混淆

c# - ASP .Net Core 中静态方法的依赖注入(inject)

c# - Windows 窗体应用程序 C# 中的依赖注入(inject)

angularjs - Angular 输入限制为 1 个字符

javascript - AngularJS - Controller 初始化时触发的 ng-change

java - 在独立应用程序中使用 Jersey 的依赖注入(inject)

java - 如何使用 guice 注入(inject)通用接口(interface)实现