Подтвердить что ты не робот

Почему я не могу ввести 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
4b9b3361

Ответ 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) {

        }
    ]);