为什么我无法注入角度曲奇?

Jef*_*ong 28 javascript angularjs 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>
Run Code Online (Sandbox Code Playgroud)

一切都正确加载.

然后在我的JavaScript中我尝试注入ngCookies:

angular.module("myApp", ["ngCookies"]).
    config(function($cookies) {
         console.log($cookies.myCookie);
    });
Run Code Online (Sandbox Code Playgroud)

但它似乎没有找到$ cookies:

 Unknown provider: $cookies from myApp
Run Code Online (Sandbox Code Playgroud)

pko*_*rce 29

我不确定你的功能用例是什么,但你不能$cookies在配置块中注入服务(是一项服务).只能在配置块中注入常量和提供程序.

您可以将服务注入运行块,但我不知道这是否对您有所帮助,因为我不确定您尝试使用这些cookie做什么.

顺便说一句:你好像是混合了主角度文件和ngCookies模块的版本.这与您的问题没有直接关系,但这很奇怪.


Kam*_*zot 11

您可以手动注入它:

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

  // here you can use $cookies as usual
});
Run Code Online (Sandbox Code Playgroud)

您可能想知道为什么我们必须ngCookiesinjector()呼叫指定为.invoke()呼叫?

ngCookies是模块的名称(您需要在项目中使用angular-cookies.js才能使用此模块).通过调用创建注入器时,injector()请指定应使用哪些模块,以便可以使用这些模块中的服务.

invoke()调用一个函数但让你指定哪些服务(由各种模块提供)应该传递给函数(在我们的例子中,ngCookies模块提供的服务被命名$cookies)

这个解决方案有点像黑客,因为你手动创建新的注入器,与你的角度应用程序自动创建和使用的注入器分开,但它应该是安全的,因为ngCookie似乎只使用不保留自己的角度功能状态,只是浏览器功能的薄包装.