Используйте подчеркивание внутри угловых контроллеров
Как использовать библиотеку подчеркивания внутри контроллеров angularjs?
На этом посте: AngularJS limitTo по последним 2 записям кто-то предложил назначить переменную _ для rootScope, чтобы библиотека была доступна для всех областей в приложении.
Но мне не понятно, где это сделать. Я имею в виду, это должно идти на декларации модуля приложения? то есть:
var myapp = angular.module('offersApp', [])
.config(['$rootScope', function($rootScope) { }
Но тогда где я могу загрузить подчеркивание lib? У меня просто есть на моей странице указателя директива ng-app и ссылка на скрипт как angular-js, так и 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>
...
Как мне этого добиться?
6 ответов
Когда вы включаете Underscore, он присоединяется к window
объект, и так доступен во всем мире.
Таким образом, вы можете использовать его из Angular-кода как есть.
Вы также можете обернуть его в сервис или на заводе, если хотите, чтобы его вводили:
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
});
Я реализовал предложение @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(...); ...
Я использую это:
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
,
Вы также можете взглянуть на этот модуль для угловых
Если вы не возражаете против использования lodash, попробуйте https://github.com/rockabox/ng-lodash он полностью обернет lodash, так что это единственная зависимость, и вам не нужно загружать любые другие файлы сценариев, такие как lodash.
Lodash полностью выходит за рамки окна и не "надеется", что он был загружен до вашего модуля.
Вы можете использовать этот модуль -> https://github.com/jiahut/ng.lodash
это для lodash
так же underscore