Использовать подчеркивание внутри контроллеров Angular
Как использовать библиотеку подчеркивания внутри контроллеров angularjs?
В этом сообщении: Ограничение по AngularJSДобавить последние 2 записи
кто-то предложил назначить переменную _ для rootScope, чтобы библиотека была доступна для всех областей приложения.
Но я не знаю, где это сделать. Я имею в виду, должен ли он следовать декларации модуля приложения? i.e:
var myapp = angular.module('offersApp', [])
.config(['$rootScope', function($rootScope) { }
Но тогда, где я загружаю underscore lib? У меня на моей индексной странице директива ng-app и script ссылка на angular -js и underscore libs?
index.html
:
<head>
</head>
<body ng-app="offersApp">
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="scripts/vendor/angular.js"></script>
<script src="scripts/vendor/underscore.js"></script>
...
Как мне это достичь?
Ответы
Ответ 1
Когда вы включаете Underscore, он присоединяется к объекту window
и поэтому доступен по всему миру.
Таким образом, вы можете использовать его из Angular кода как есть.
Вы можете также обернуть его в службу или factory, если хотите, чтобы она была введена:
var underscore = angular.module('underscore', []);
underscore.factory('_', ['$window', function($window) {
return $window._; // assumes underscore has already been loaded on the page
}]);
И затем вы можете запросить _
в вашем модуле приложения:
// Declare it as a dependency of your module
var app = angular.module('app', ['underscore']);
// And then inject it where you need it
app.controller('Ctrl', function($scope, _) {
// do stuff
});
Ответ 2
Я внедрил предложение @satchmorun здесь:
https://github.com/andresesfm/angular-underscore-module
Чтобы использовать его:
-
Убедитесь, что вы включили в проект проект underscore.js
<script src="bower_components/underscore/underscore.js">
-
Получите его:
bower install angular-underscore-module
-
Добавить angular -underscore-module.js в ваш основной файл (index.html)
<script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
-
Добавить модуль как зависимость в определении приложения
var myapp = angular.module('MyApp', ['underscore'])
-
Чтобы использовать, добавьте в качестве вложенной зависимости к своему контроллеру/службе и он будет готов использовать
angular.module('MyApp').controller('MyCtrl', function ($scope, _) {
...
//Use underscore
_.each(...);
...
Ответ 3
Я использую это:
var myapp = angular.module('myApp', [])
// allow DI for use in controllers, unit tests
.constant('_', window._)
// use in views, ng-repeat="x in _.range(3)"
.run(function ($rootScope) {
$rootScope._ = window._;
});
Смотрите https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection примерно наполовину для получения дополнительной информации о run
.
Ответ 4
Вы также можете взглянуть на этот модуль для angular
https://github.com/floydsoft/angular-underscore
Ответ 5
Если вы не против использования lodash, попробуйте https://github.com/rockabox/ng-lodash, он полностью завершает lodash, так что это единственная зависимость, и вы не необходимо загрузить любые другие script файлы, такие как lodash.
Lodash полностью отключен от области видимости окна и не "надеется", что он был загружен до вашего модуля.
Ответ 6
вы можете использовать этот модуль → https://github.com/jiahut/ng.lodash
это для lodash
, поэтому underscore