Почему я не могу ввести cookie-файлы angular?
Я имею
<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
6 ответов
Я не уверен, каков ваш функциональный вариант использования, но вы не можете внедрить сервисы ($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
к injector()
называть так же, как на .invoke()
вызов?
ngCookies
это имя модуля (для использования этого модуля в вашем проекте должен быть файл angular-cookies.js). Когда вы создаете инжектор по телефону injector()
Вы указываете, какие модули следует использовать, чтобы можно было использовать сервисы из этих модулей.
invoke()
вызывает функцию, но давайте укажем, какие сервисы (предоставляемые различными модулями) должны быть переданы в функцию (в нашем случае сервис, предоставляемый ngCookies
модуль назван $cookies
)
Это решение немного взломано, потому что вы вручную создаете новый инжектор отдельно от того, который автоматически создает и использует ваше угловое приложение, но это должно быть безопасно, потому что ngCookie
похоже, что он использует только функции angular, которые не сохраняют свое собственное состояние и являются лишь тонкими обертками для функциональности браузера.
Я столкнулся с той же проблемой. угловая версия и угловая версия cookie не совпадают. что я сделал, чтобы исправить это, обновить 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.
и это сработало.
С /questions/36162233/neizvestnyij-provajder-cookiestore/36162237#36162237, похоже, что вам нужно отключить 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) {
}
]);