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

AngularJS:如何在没有工厂的情况下将下划线注入控制器,angularjs,dependency-injection,underscore.js,Angularjs,Dependency Injection,Underscore.js,请指导我如何在没有工厂的情况下将下划线注入控制器 使用factory,我的代码示例正在运行……在这里 var myApp = angular.module('myApp', []); myApp.factory('_', function() { return window._; //Underscore should be loaded on the page }); myApp.controller('MainCtrl', function ($scope, _) { });

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

使用factory,我的代码示例正在运行……在这里

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

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


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

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

SyntaxError:缺少)参数列表后错误:[$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);    
});

var myApp=angular.module('myApp',['下划线']);
myApp.controller('MyCtrl',函数($scope,\ux)
{
$scope.awesomeThings=[
“HTML5样板文件”,
“AngularJS2”,
“AngularJS1”
];
var x=u.last($scope.awesomeThings,2);
_.每个(x.反转(),警报);
});

我遗漏了一些东西……请告诉我需要在代码中更正什么。谢谢

依赖项注入应该只用于角度对象(服务、控制器等)

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

依赖项注入应该只用于角度对象(服务、控制器等)

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

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

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);    
});

我已经说过,我想直接将下划线注入控制器,而不是通过工厂示例。我的第一个示例展示了如何通过工厂示例注入下划线,但看到了我的第二个示例,我尝试直接注入下划线而不是工厂。@MonojitSarkar DI就是这样工作的。为了注入一些东西,您应该首先定义它。您不能“直接”插入它。您的控制器名称应该是
MainCtrl
还是
MyCtrl
?它应该是MainCtrl。那么,您在哪里定义了下划线模块?我已经说过,我想直接将下划线插入控制器,而不是通过工厂示例执行。我的第一个示例展示了如何通过工厂示例注入下划线,但看到了我的第二个示例,我尝试直接注入下划线而不是工厂。@MonojitSarkar DI就是这样工作的。为了注入一些东西,您应该首先定义它。您不能“直接”注入它。您的控制器名称应该是
MainCtrl
还是
MyCtrl
?它应该是MainCtrl。那么,您在哪里定义了下划线模块呢?我复制了您的代码,但不在这里工作是JSFIDLE我在这里为控制器使用了不同的名称,我修复了,代码在没有注入下划线的情况下工作。这是js fiddle版本,看,我复制了你的代码,但这里不工作,这是JSFIDLE,我在这里为控制器使用了不同的名称,我修复了它,代码工作时没有注入下划线。这里是js小提琴版本