如何在AngularJS登录控制器中使用ngCookies?

时间:2016-06-06 10:45:02

标签: angularjs angular-cookies

我使用了generator-angular-fullstack和一个新制作的路由客户端/ app / login。它包含login.controller.js,login.html,login.js,login.controller.spec.js和login.scss。我已经设置了一个登录API端点 我想从它返回到cookie的JSON中保存“authentication_token”和“user_id”。已安装Angular-cookies(ngCookies)。

我已经尝试调整文档示例(https://docs.angularjs.org/api/ngCookies/service/ $ cookies),但到目前为止运气不大。 控制台错误='$ cookies.put不是函数'(Angular 1.5.6)。另外,改变

angular.module('myApp');

angular.module('myApp', ['ngCookies']); 

甚至

angular.module('myApp', ['']); 
除了标题之外,

已使登录页面变为空白。我认为模块不存在是不重要的,因为尝试加载一个不存在的模块会给出一个完全空白的页面(也没有标题)。

有什么建议吗?

的login.html

<body>
<script src="/bower_components/angular-cookies/angular-cookies.js"></script>    
<form ng-submit="callSignIn(username, password, site)">
Email:
  <input type="text" ng-model="username"><br>
Password:
  <input type="text" ng-model="password"><br>
Site:
  <input type="text" ng-model="site"><br>
  <input type="submit" value= "Submit">
</form>
<section ui-view>Response: {{response}}</section>
</body>

login.controller.js

'use strict';
(function(){

  class LoginComponent {
    constructor($scope, $http, $cookies) {
      $scope.callSignIn = function(username, password, site) {
        $http.post('/api/auth/signin', {
          username: username,
          password: password,
          site: site
        }).success(function(response, $cookies) {
          $scope.response = response;
          $cookies.put('myFavorite', 'oatmeal'); //testvalue
        });
      };

    }
  }

  angular.module('orbitApp') //angular.module('orbitApp', ['ngCookies']) gives blank login page...
    .component('login', {
      templateUrl: 'app/login/login.html',
      controller: LoginComponent
    });

})();

login.js

'use strict';

angular.module('orbitApp')
  .config(function ($stateProvider) {
    $stateProvider
      .state('login', {
        url: '/login',
        template: '<login></login>'
      });
  });

典型的JSON响应:

{"http_code":200,"response":{"authentication_token":"a","site_id":"b","content_url":"c","user_id":"d"}}

2 个答案:

答案 0 :(得分:1)

为什么要在login.html而不是index.html中加载angular-cookies.js

当您的模块引导时,angular-cookies无法使其变为空白,您可以拥有console error too

答案 1 :(得分:0)

通过更改解决

.success(function(response, $cookies) {

.success(function(response) {

同时保持其他一切(包括angular.module)。它现在就像一个魅力。