AngularJS:如何在没有工厂的情况下将下划线注入控制器

时间:2017-06-15 13:52:33

标签: angularjs dependency-injection underscore.js

请指导我如何在没有工厂的情况下将下划线注入控制器。

使用工厂我的代码示例正在运行....这里是。

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

myApp.factory('_', function() {
  return window._; //Underscore should be loaded on the page
});


myApp.controller('MainCtrl', function ($scope, _) {

});   

但是当我尝试在控制器中注入下划线然后得到如下错误时没有工厂

  参数列表错误后出现

SyntaxError:missing):[$ injector:modulerr]   由于以下原因无法实例化myApp模块:[$ injector:nomod]模块   'myApp'不可用!您要么错误拼写了模块名称,要么   忘记加载它。如果注册模块,请确保指定   依赖作为第二个参数。

这是没有工厂将下划线注入控制器的代码。

<div ng-app="myApp" ng-controller="MainCtrl">

</div>

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

myApp.controller('MyCtrl', function ($scope, _) 
{
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS2',
      'AngularJS1'
    ];

    var x = _.last($scope.awesomeThings, 2);
    _.each(x.reverse(), alert);    
});

我遗漏了一些东西......请告诉我在代码中需要纠正的内容。感谢

2 个答案:

答案 0 :(得分:2)

您可以为此下划线创建一个单独的模块

var underscore = angular.module('underscore', []);
underscore.factory('_', ['$window', function($window) {
  return $window._; // assumes underscore has already been loaded on the page
}]);

现在将下划线模块注入您的app模块

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

myApp.controller('MyCtrl', function ($scope, _) 
{
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS2',
      'AngularJS1'
    ];

    var x = _.last($scope.awesomeThings, 2);
    _.each(x.reverse(), alert);    
});

答案 1 :(得分:1)

依赖注入只应用于角度内容(服务,控制器......)。

与angular无关的所有内容都不应该用于依赖注入。

只要在角度控制器之前加载下划线,就可以使用它,因为它将被添加到窗口对象中。

以下内容可以正常运行:

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

myApp.controller('MyCtrl', function ($scope) 
{
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS2',
      'AngularJS1'
    ];

    var x = _.last($scope.awesomeThings, 2);
    _.each(x.reverse(), alert);    
});