[英]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
});
你可能想知道為什么我們必須指定ngCookies
到ngCookies
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.