Angular JS - 设置$ cookies域范围失败

nog*_*ias 4 javascript cookies angularjs

我在angularjs应用程序中设置cookie时一直遇到麻烦.情况是我想在站点范围内设置一个cookie,但我不知道如何使用angular js default $ cookies对象设置cookie的所有参数.

例如,通常在Javascript中我会写这个

var exp = new Date();
exp.setTime(exp.getTime()+(24*60*60*1000)); // expires after a day
document.cookie = "myCookies=yes;expires="+exp.toGMTString()+ ";domain=.example.com;path=/";
Run Code Online (Sandbox Code Playgroud)

但由于DOM对象无法轻松加载到我的应用程序中,因此我必须使用$ cookies(angular-cookies.js).新代码是:

angular.module('MyApp')
    .controller('MyCtrl', function ($scope, $filter, Slug,PUBLIC_ROUTES, $cookies) {
        var myCookies = $cookies['mycookies'];
        if (typeof myCookies == 'undefined' || typeof myCookies == undefined) {
            $cookies['mycookies'] = "yes";
        }
    });
Run Code Online (Sandbox Code Playgroud)

但我无法设置到期日期,路径和域名,因为$ cookies不可用.

我该怎么办?

and*_*zep 14

如果您使用的是角度1.4+,只需$cookiesProvider.defaults在主应用模块的配置部分设置即可.例:

angular.module('my-app', [ngCookies])
.config(['$cookiesProvider', function($cookiesProvider) {
    // Set $cookies defaults
    $cookiesProvider.defaults.path = '/';
    $cookiesProvider.defaults.secure = true;
    $cookiesProvider.defaults.expires = exp_date;
    $cookiesProvider.defaults.domain = my_domain;
}]);
Run Code Online (Sandbox Code Playgroud)

只是不要犯同样的错误,我首先使用这样的新对象分配默认值:

$cookiesProvider.defaults = {path: '/', secure: true};
Run Code Online (Sandbox Code Playgroud)

这会破坏对象的引用,并且不再覆盖默认值.


dsu*_*ess 1

$cookies允许您使用$cookiesProviderput(key, value, [options])中的选项,包括过期属性。

您还可以看看如何在 AngularJS 中设置 cookie 的过期日期