我在当前项目中使用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

07-26 05:07