私が持っています
<body ng-app="myApp">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular-cookies.min.js">
</script>
</body>
すべてが正しく読み込まれます。
次に、私のJavaScriptでngCookiesを挿入しようとします:
angular.module("myApp", ["ngCookies"]).
config(function($cookies) {
console.log($cookies.myCookie);
});
しかし、$ cookiesが見つからないようです:
Unknown provider: $cookies from myApp
あなたの機能的なユースケースは何なのかわかりませんが、サービスをインジェクトできません($cookies
はサービスです)configブロック内。構成ブロック内に挿入できるのは定数とプロバイダーのみです。
サービスを実行ブロックに挿入することはできますが、これらのCookieをどうしようとしているのかわからないので、これが役立つかどうかはわかりません。
ところで:あなたはメインのangularファイルとngCookies
モジュールのバージョンを混合しているようです。これはあなたの問題に直接リンクされていませんが、これはかなり奇妙です。
手動で注入できます:
_myApp.config(function() {
var $cookies;
angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
$cookies = _$cookies_;
}]);
// here you can use $cookies as usual
});
_
injector()
呼び出しと同様に.invoke()
呼び出しにngCookies
を指定しなければならないのはなぜかと思うかもしれません。
ngCookies
はモジュールの名前です(このモジュールを使用するには、プロジェクトに angular-cookies.js が必要です)。 injector()
を呼び出してインジェクターを作成する場合、使用するモジュールを指定して、それらのモジュールのサービスを使用できるようにします。
invoke()
は関数を呼び出しますが、どのサービス(さまざまなモジュールによって提供される)を関数に渡すかを指定できます(この場合、ngCookies
モジュールによって提供されるサービスの名前は_$cookies
_)
angularアプリが自動作成して使用するものとは別の新しいインジェクターを手動で作成するため、このソリューションはちょっとしたハックですが、ngCookie
angularの機能のみを使用しているようです。これらの機能は、独自の状態を保持せず、ブラウザ機能の単なるラッパーです。
同じ問題が発生しました。 angular version and the angular cookiesバージョンが一致しませんでした。修正するために行ったのは、bower.jsonを両方の作業バージョンに更新することです。
"angular": ">=1.2.*",
"angular-cookies": ">=1.2.*"
それから私は走った:
bower install
私はこの質問を得ました:
Unable to find a suitable version for angular, please choose one:
1) angular#1.3.13 which resolved to 1.3.13 and is required by angular-cookies#1.3.13
2) angular#>=1.2.x <=1.4.x which resolved to 1.3.16 and is required by oclazyload#1.0.1
3) angular#1.4.0 which resolved to 1.4.0 and is required by angular-cookies#1.4.0
4) angular#>=1.2.* which resolved to 1.4.0 and is required by hashve
5) angular#>=1 which resolved to 1.4.0 and is required by angular-bootstrap#0.11.2
6) angular#>=1.2.26 <=1.5 which resolved to 1.4.0 and is required by angular-translate#2.7.2
7) angular#~1.x which resolved to 1.4.0 and is required by restangular#1.5.1
8) angular#^1.2.6 which resolved to 1.4.0 and is required by angular-socket-io#0.6.1
9) angular#>= 1.0.8 which resolved to 1.4.0 and is required by angular-ui-router#0.2.15
10) angular#>=1.2.0 <1.5.0 which resolved to 1.4.0 and is required by angular-moment#0.10.1Prefix the choice with ! to persist it to bower.json
次に、3を選択しました。
そしてそれは働いた。
他の誰もが述べたように、angular cookieサービスを使用することはできません。ただし、document.cookieを使用してアクセスし、自分で解析することはできないと言う法律はありません。 Cookieへのアクセスを提供する独自のプロバイダーを作成し、それを挿入できます。angularは単なるフレームワークであり、フレームワークに制限がある場合は、 javascript。
https://stackoverflow.com/a/18971123/132374 から、まだお持ちでない場合は、サービスモジュールで「ngCookies」を削除する必要があるようです:
var serviceModule = angular.app('App.services', ['ngCookies']);
それは私のために働いた。それを念頭に置いて $cookies
は、Angularでサービスを注入できる場合にのみ機能します(詳細については、受け入れられた回答を参照してください)。