28

私は持っている

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

6 に答える 6

29

機能的なユースケースが何であるかはわかりません$cookiesが、構成ブロック内にサービスを挿入することはできません (サービスです)。構成ブロック内に注入できるのは、定数とプロバイダーのみです。

サービスを実行ブロックに挿入することはできますが、これらの Cookie で何をしようとしているのかわからないため、これが役立つかどうかはわかりません。

ところで:メインのAngularファイルとngCookiesモジュールのバージョンが混在しているようです。これはあなたの問題に直接関連していませんが、これはかなり奇妙です。

于 2013-03-12T11:18:12.007 に答える
11

手動で注入できます:

myApp.config(function() {
  var $cookies;
  angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
    $cookies = _$cookies_;
  }]);

  // here you can use $cookies as usual
});

呼び出しと同じようngCookiesに、呼び出しを指定する必要があるのはなぜでしょうか。injector().invoke()

ngCookiesモジュールの名前です (このモジュールを使用できるようにするには、プロジェクトにangular-cookies.jsが必要です)。呼び出してインジェクターを作成する場合、injector()使用するモジュールを指定して、それらのモジュールのサービスを使用できるようにします。

invoke()関数を呼び出しますが、関数に渡す必要があるサービス (さまざまなモジュールによって提供される) を指定しましょう (この場合、ngCookiesモジュールによって提供されるサービスは という名前です$cookies)

angularアプリが自動作成して使用するものとは別に新しいインジェクターを手動で作成しているため、このソリューションは少しハックですがngCookie、独自のものを保持しないAngularの機能のみを使用しているように見えるため、安全である必要があります状態であり、ブラウザ機能の薄いラッパーにすぎません。

于 2014-11-27T10:10:37.827 に答える
0

他の皆さんが述べたように、angular cookie サービスは使用できません。しかし、単に document.cookie を使用してアクセスし、自分で解析することはできないという法律は知られていません。または、Cookie へのアクセスを提供する独自のプロバイダーを作成し、それを挿入することもできます。angular は単なるフレームワークであり、フレームワークに制限がある場合は、javascript と呼ばれるものを使用することを忘れないでください。

于 2016-09-23T20:05:51.353 に答える
0

https://stackoverflow.com/a/18971123/132374から、まだ行っていない場合は、サービス モジュールで 'ngCookies' をデラレする必要があるようです。

var serviceModule = angular.app('App.services', ['ngCookies']);

それは私のために働いた。$cookiesAngular でサービスを挿入できる場合にのみ機能することに注意してください (詳細については、受け入れられた回答を参照してください) 。

于 2015-04-02T04:07:39.253 に答える