AngularJS:如何在没有工厂的情况下将下划线注入控制器
请指导我如何在没有工厂的情况下将下划线注入控制器 使用factory,我的代码示例正在运行……在这里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, _) { });
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小提琴版本