【问题标题】:How to resolve the cookieStore is not defined error in angular js?如何解决angular js中的cookieStore未定义错误?
【发布时间】:2015-02-25 12:43:39
【问题描述】:

在这里,当我单击 storeAreaInCookie 时,这将导致城市的纬度和经度,这些结果我必须存储在 cookie 中,并且需要在我想在我的网站中使用的任何地方使用。但是当我尝试使用此代码时不存储 cookie 并在控制台中说未定义 cookie 存储。我该如何解决这个问题?

 <div ng-app="MyApp" ng-controller="MyCtrl">
    <div ng-repeat="x in names">
     <div ng-click="storeAreaInCookie(x.city)" >{{x.city}}</div>
    </div>
    </div>
    <script>
    angular.module('MyApp', ['ngCookies'])
    .controller('MyCtrl', ['$scope', '$http',"$rootScope", "$cookieStore", function($scope, $http, $rootScope, $cookieStore) {
    $scope.storeAreaInCookie = function (area) {
            var geocoder =  new google.maps.Geocoder();
            var lat="";
            var long="";
            geocoder.geocode( { 'address': area}, function(results, status) {
                 if (status == google.maps.GeocoderStatus.OK) {
                        $rootScope.lat=results[0].geometry.location.lat();
                        $rootScope.long=results[0].geometry.location.lng();
                    } else {
                       alert("Something went wrong " + status);
                     }
                codeLatLng($rootScope.lat,$rootScope.long);
                 $(document).ready(function(){
                    $("#locationView").slideToggle();
                });
             });
          $cookieStore.put('lat',$rootScope.lat);
          $cookieStore.put('long',$rootScope.long);   
          alert("lat"+$cookieStore.get('lat'));
          alert("long"+$cookieStore.get('long'));
          };
    }]);
    </script>

【问题讨论】:

  • 控制台有什么错误吗?
  • @pankaj 是的,它显示 cookiestore 未定义。你能帮我解决这个问题吗
  • 检查我的答案,你的代码工作正常,只有我嘲笑了这个值并跳过了 google.map
  • @pankaj 在这里我将把城市作为地理编码器的输入,我将从地理编码器中获取纬度和经度,然后我会将结果存储在 cookie 中。这里我遇到了它正在执行的地理编码器的问题在 cookie 存储之后,所以只要先空,就会有 lat long。
  • 你需要把这行代码($cookieStore相关的代码)放到geocode的成功里面,因为它是使用promise..like运行的

标签: angularjs google-geocoder geocode angular-cookies angularjs-digest


【解决方案1】:

可能是你弄乱了 angular-cookies 依赖项。在 $rootScope 中更改值后,您需要使用 $rootScope.$apply() 手动运行摘要循环

代码

angular.module('MyApp', ['ngCookies'])
    .controller('MyCtrl', ['$scope', '$http', "$rootScope", "$cookieStore", "$q", function ($scope, $http, $rootScope, $cookieStore, $q) {
    $scope.names = [{
        "id": 1,
        city: "abc",
        lat: 123,
        long: 345
    }, {
        "id": 2,
        city: "asd",
        lat: 123,
        long: 345
    }, {
        "id": 3,
        city: "dfg",
        lat: 123,
        long: 345
    }];
    //mock ajax
    $scope.storeAreaInCookie = function (area) {
        var geocoder = new google.maps.Geocoder();
        var lat = "";
        var long = "";
        geocoder.geocode({
            'address': area.city
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                $rootScope.lat = results[0].geometry.location.lat();
                $rootScope.long = results[0].geometry.location.lng();
                $rootScope.$apply()
                $cookieStore.put('lat', $rootScope.lat);
                $cookieStore.put('long', $rootScope.long);
                alert("lat" + $cookieStore.get('lat'));
                alert("long" + $cookieStore.get('long'));
            } else {
                alert("Something went wrong " + status);
            }
            //codeLatLng($rootScope.lat, $rootScope.long);
            $(document).ready(function () {
                $("#locationView").slideToggle();
            });
        });

    };
}]);

Working Fiddle

希望对你有帮助,谢谢。

【讨论】:

【解决方案2】:

确保您添加的参考文件

angular-cookies.js

可能是依赖错误

【讨论】:

  • 是的,我在我的页面中添加了 angular-cookies.js 和 angularjs-1.2.26.js cdn 仍然遇到相同的问题 cookie 值未存储。
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2020-07-19
相关资源
最近更新 更多