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

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

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

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]由于:[$ injector:nomod]模块'myApp'不可用,因此无法实例化模块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);    
});

我错过了一些东西....请告诉我,我需要在代码中纠正。 谢谢


依赖注入只应用于角色的东西(服务,控制器,...)。

所有与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);    
});

你可以像这样为下划线创建一个单独的模块

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

现在将下划线模块注入您的应用程序模块

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);    
});
链接地址: http://www.djcxy.com/p/77857.html

上一篇: AngularJS: How to inject underscore into controller without factory

下一篇: AngularJS: Injecting service into a HTTP interceptor (Circular dependency)