Angularjsコントローラー内でアンダースコアライブラリを使用するにはどうすればよいですか?
この投稿: AngularJS limitTo by last 2 records 誰かが_変数をrootScopeに割り当てて、ライブラリがアプリ内のすべてのスコープで利用できるようにすることを提案しました。
しかし、私はそれをどこで行うか明確ではありません。アプリモジュールの宣言に含める必要がありますか?すなわち:
var myapp = angular.module('offersApp', [])
.config(['$rootScope', function($rootScope) { }
しかし、その後、アンダースコアlibをどこにロードしますか?私はちょうどインデックスページにng-appディレクティブとangular-jsとアンダースコアライブラリの両方へのスクリプト参照を持っていますか?
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>
...
どうすればこれを達成できますか?
アンダースコアを含めると、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._;
});
run
の詳細については、 https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection を約半分参照してください。
角度については、このモジュールをご覧ください
Lodashを使用してもかまわない場合は、 https://github.com/rockabox/ng-lodash lodashを完全にラップするので、これが唯一の依存関係であり、他のロードは不要です。 lodashなどのスクリプトファイル。
Lodashはウィンドウスコープから完全に外れており、モジュールの前にロードされることを「期待」していません。