1. ホーム
  2. javascript

[解決済み] Angular コントローラ内でアンダースコアを使用する

2022-07-28 16:37:26

質問

angularjsのコントローラ内でunderscoreライブラリを使用するにはどうしたらよいですか?

この記事で AngularJS limitTo by last 2 records(直近の2レコードで表示する)。 誰かが、アプリ内のすべてのスコープでライブラリが利用できるように、rootScopeに_変数を割り当てることを提案しました。

しかし、私はそれをどこで行うべきか明確ではありません。つまり、アプリのモジュール宣言で行うべきでしょうか。

var myapp = angular.module('offersApp', [])
            .config(['$rootScope', function($rootScope) { }

しかし、その後、私はどこにアンダースコアのライブラリをロードするのですか?私はちょうど私のインデックスページにng-appディレクティブとスクリプトは、angular-jsとunderscoreライブラリの両方への参照を持つのですか?

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>
...  

どうすれば実現できるのか?

どのように解決するのですか?

Underscoreをインクルードするとき、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
});