簡體   English   中英

為什么我無法注入角度曲奇?

[英]Why am I unable to inject angular-cookies?

我有

<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是服務)。 只能在配置塊中注入常量和提供程序。

您可以將服務注入運行塊,但我不知道這是否對您有所幫助,因為我不確定您嘗試使用這些cookie做什么。

順便說一句:您似乎混合了主角度文件和ngCookies模塊的版本。 這與您的問題沒有直接關系,但這很奇怪。

您可以手動注入它:

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

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

你可能想知道為什么我們必須指定ngCookiesngCookies injector()調用為.invoke()調用?

ngCookies是模塊的名稱(您需要在項目中使用angular-cookies.js才能使用此模塊)。 通過調用injector()創建注入器時,您可以指定應使用哪些模塊,以便可以使用這些模塊中的服務。

invoke()調用一個函數但讓你指定應該將哪些服務(由各種模塊提供)傳遞給函數(在我們的例子中, ngCookies模塊提供的服務名為$cookies

這個解決方案有點像黑客,因為你是手動創建新的注入器,與你的角度應用程序自動創建和使用的注入器分開,但它應該是安全的,因為ngCookie似乎只使用角度不能保持其角度的功能自己的狀態,只是瀏覽器功能的薄包裝。

我遇到了同樣的問題。 角度版本和角度曲奇版本不匹配。 我所做的是修復它是將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。

它起作用了。

https://stackoverflow.com/a/18971123/132374 ,您似乎需要在服務模塊中聲明'ngCookies',如果您還沒有:

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

這對我有用。 請記住, $cookies僅適用於Angular允許您注入服務的地方(有關詳細信息,請參閱接受的答案)。

像其他人一樣,你不能使用有角度的cookie服務。 但是,沒有人知道法律說你不能簡單地使用document.cookie來訪問它並自己解析它。 或者,您可以創建自己的提供程序,使您可以訪問cookie,並可以注入。 請記住,angular只是一個框架,當框架有限制時,你必須記住使用一個叫做javascript的東西。

你應該注入名稱$cookieProvider而不是$cookies

angular.module("MyApp", ["ngCookies","ngRoute"])
    .config(["$routeProvider", "$locationProvider","$cookiesProvider",
        function($routeProvider, $locationProvider, $cookies) {

        }
    ]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM