我在当前项目中使用AngularJS,并且尝试实现一种功能,该功能可以检测浏览器中是否禁用了cookie。我尝试使用AngularJS模块“ ngCookies”来解决此问题。此功能的主要思想是创建一些cookie,然后检查该cookie是否已创建(可用)并显示消息(如果未创建)。但这没有用。
控制器:
someProject.controller('CookieCtrl', ['$scope', '$cookieStore', function($scope, $cookieStore) {
$scope.areCookiesEnabled = false;
$cookieStore.put("TestCookie", "TestCookieText");
$scope.cookieValue = $cookieStore.get("TestCookie");
if ($scope.cookieValue) {
$cookieStore.remove("TestCookie");
$scope.areCookiesEnabled = true;
}
}]);
视图:
<div class="main" data-ng-controller="CookieCtrl">
<div class="warning_message" data-ng-show="!areCookiesEnabled">
<span data-ng-bind="areCookiesEnabled"></span>
</div>
</div>
谁能告诉我我的错误在哪里?
最佳答案
校验:
<div class="warning_message" data-ng-show="!areCookiesEnabled">
data-ng-show="!areCookiesEnabled"
评估为false
。因此,如果存在cookie,则不会显示您的消息。我做了一个显示这个的小矮人。控制器代码很好,只需删除ng-show即可查看,或从
!areCookiesEnabled
更改为areCookiesEnabled
。[编辑]
用$ cookieStore创建cookie后,调用方法$ window.cookies();。
此方法将返回所有创建的cookie。例:
Object {__utmnodejs: "0x0ceb506e0755ba20", __utma: "137862001.1755124536.1363704654.1383162104.1383305355.73", __utmb: "137862001.2.10.1383305355", __utmc: "137862001", __utmz: "137862001.1383305355.73.49.utmcsr=stackoverflow.co…s-are-disabled-in-browser-with-angularjs/19719108"…}
如果cookie被禁用,将返回一个空对象:
Object {}
发生这种情况是因为
$cookieStore
缓存了所有创建的cookie,因此,即使它们不可用,您也会在$cookie
服务中看到缓存的值。http://plnkr.co/edit/TiG6Zx5UKrF8BT9lmdId?p=preview