Почему я не могу ввести 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
Ответы
Ответ 1
Я не уверен, каков ваш функциональный вариант использования, но вы не можете вводить сервисы ($cookies
является сервисом) внутри конфигурационных блоков. Только константы и поставщики могут быть введены внутри конфигурационных блоков.
Вы можете внедрять службы в блоки запуска, но я не знаю, помогает ли это вам, так как я не уверен, что вы пытаетесь сделать с этими куки.
Кстати: вы, кажется, смешиваете версии основного файла angular и модуля ngCookies
. Это не связано напрямую с вашей проблемой, но это довольно странно.
Ответ 2
Вы можете ввести его вручную:
myApp.config(function() {
var $cookies;
angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
$cookies = _$cookies_;
}]);
// here you can use $cookies as usual
});
Вы можете задаться вопросом, почему нам нужно указывать ngCookies
на вызов injector()
как WELL по вызову .invoke()
?
ngCookies
- это имя модуля (вам нужно иметь angular -cookies.js в своем проекте, чтобы иметь возможность использовать этот модуль), Когда вы создаете инжектор, вызывая injector()
, вы указываете, какие модули следует использовать, чтобы можно было использовать сервисы из этих модулей.
invoke()
вызывает функцию, но позволяет указать, какие службы (предоставляемые различными модулями) должны быть переданы в функцию (в нашем случае служба, предоставляемая модулем ngCookies
, называется $cookies
)
Это решение немного взломано, потому что вы вручную создаете новый инжектор отдельно от того, который автоматически создается и использует ваше приложение angular, но оно должно быть безопасным, поскольку ngCookie
, по-видимому, использует только функции angular, которые не сохраняют свое собственное состояние и являются лишь тонкой оболочкой функций браузера.
Ответ 3
Я столкнулся с той же проблемой.
версия angular и версия 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.
и он работал.
Ответ 4
Из fooobar.com/questions/201307/... похоже, что вам нужно делиться "ngCookies" в своем сервисном модуле, если вы еще этого не сделали:
var serviceModule = angular.app('App.services', ['ngCookies']);
Это сработало для меня. Имейте в виду, что $cookies
работает только там, где Angular позволяет вам вводить услуги (см. Принятый ответ для деталей).
Ответ 5
Как и все остальные, вы не можете использовать службу cookie angular. Тем не менее, для человека нет закона, который говорит, что вы не можете просто использовать document.cookie для доступа к нему и самостоятельно разобрать его. Кроме того, вы можете создать своего собственного провайдера, который предоставит вам доступ к файлам cookie, и вы можете это добавить. Помните, что angular - это просто фреймворк, и когда у рамки есть ограничения, вы должны помнить, что используете что-то, называемое javascript.
Ответ 6
Вместо $cookies
вам следует ввести имя $cookieProvider
:
angular.module("MyApp", ["ngCookies","ngRoute"])
.config(["$routeProvider", "$locationProvider","$cookiesProvider",
function($routeProvider, $locationProvider, $cookies) {
}
]);