AngularJS中$cookies.put方法无法正常使用问题排查
我帮你排查下问题所在,你的代码里有两个核心问题导致Cookie设置失败,咱们一步步来修复:
1. 依赖注入不匹配
你在控制器的$inject数组里只声明了['QuizData', 'quizMetrics', '$http', '$filter'],但函数参数里却包含了$cookies、$window、$cookieStore这几个额外的服务。AngularJS的依赖注入严格要求数组顺序和函数参数顺序完全一致,不匹配的话会导致这些服务无法被正确注入,$cookies会变成undefined,自然调用put方法没效果。
2. 未引入ngCookies模块
$cookies服务属于AngularJS的ngCookies模块,默认是不会加载的,你需要在定义应用模块时显式注入这个依赖,否则Angular根本找不到$cookies服务。
修正后的完整代码
// 第一步:注入ngCookies模块 var app = angular.module('allianze', ['ngCookies']); app.controller('quizctrl', QuizCtrl); // 第二步:把所有用到的服务添加到$inject数组,顺序和函数参数严格对应 QuizCtrl.$inject = ['QuizData', 'quizMetrics', '$http', '$filter', '$cookies', '$window', '$cookieStore']; function QuizCtrl(QuizData, quizMetrics, $http, $filter, $cookies, $window, $cookieStore) { var now = new Date(), exp = new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()); // 可选:如果Cookie在站点内某些路径无法访问,可以添加path参数 $cookies.put('quiztaken', 'yes', { expires: exp, path: '/' }); }
验证Cookie是否设置成功
修改完代码后,你可以打开浏览器开发者工具(F12):
- Chrome:切换到「Application」标签,在左侧菜单找到「Cookies」,查看对应域名下是否有
quiztaken这个Cookie - Firefox:切换到「Storage」标签,同样查看「Cookies」项
如果还是没生效,检查下浏览器是否禁用了Cookie,或者确认你的Cookie过期时间设置是否合理(比如不要设置过去的时间)。
内容的提问来源于stack exchange,提问作者Mohammad Sumon
相关产品推荐
相关产品推荐

