请指导我如何在没有工厂的情况下将下划线注入控制器。
使用工厂我的代码示例正在运行....这里是。
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);
});
我遗漏了一些东西......请告诉我在代码中需要纠正的内容。感谢
答案 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);
});