动态注入服务(来自控制器内)

时间:2016-04-22 11:04:08

标签: angularjs dependency-injection

我想在控制器中动态注入一些依赖项。 我可以使用$ 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并且不想臃肿'我的页面,如果不需要。 我想从我的控制器(Plunker提供:http://plnkr.co/edit/Szs4Pg?p=preview

中做到这一点

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

非常感谢提前。

2 个答案:

答案 0 :(得分:6)

<强>的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>

答案 1 :(得分:0)

此代码对我有用:

&#13;
&#13;
cats.Apply
&#13;
&#13;
&#13;

文字字符串可以是动态提供的任何变量。 来源here