Как устранить ошибку cookieStore не определена в angular js?

Здесь, когда я нажимаю 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>

person Sujithrao    schedule 25.02.2015    source источник
comment
любая ошибка в консоли?   -  person Pankaj Parkar    schedule 26.02.2015
comment
@pankaj да, это показывает, что хранилище файлов cookie не определено. Не могли бы вы помочь мне решить эту проблему?   -  person Sujithrao    schedule 27.02.2015
comment
проверьте мой ответ, ваш код работает нормально, только я издевался над значением и пропустил google.map   -  person Pankaj Parkar    schedule 27.02.2015
comment
@pankaj здесь я дам город в качестве входных данных для геокодера, и я получу широту и долготу от геокодера, а затем сохраню результаты в файле cookie. Здесь я получаю проблему с геокодером, который выполняется после хранилища файлов cookie, поэтому я получаю лат до тех пор, как пустой сначала пустой.   -  person Sujithrao    schedule 27.02.2015
comment
вам нужно поместить эту строку кода (код, связанный с $cookieStore) внутри успеха геокодирования, потому что он работает с использованием обещания..like   -  person Pankaj Parkar    schedule 27.02.2015
comment
@pankaj, если я вставлю успех геокодирования, я получаю сообщение об ошибке в консоли, которое означает, что cookieStore не определен, а файлы cookie не сохраняются. Почему возникает эта ошибка, я пробовал много способов, но проблема еще не решена.   -  person Sujithrao    schedule 27.02.2015
comment
не могли бы вы создать скрипт/plunkr этого примера?   -  person Pankaj Parkar    schedule 27.02.2015
comment
проверьте обновленный код и скрипку.. он работает.. пожалуйста, проголосуйте, если это полезно   -  person Pankaj Parkar    schedule 27.02.2015


Ответы (2)


Возможно, вы возитесь с зависимостью от угловых файлов cookie. И после изменения значения в $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();
            });
        });

    };
}]);

Рабочая скрипка

Надеюсь, это поможет вам, спасибо.

person Pankaj Parkar    schedule 27.02.2015
comment
не могли бы вы помочь мне решить эту проблему, которую я разместил здесь. i-click-on-radio-button-the-div-will-be" title="когда переключатель находится в режиме повтора, когда я нажимаю переключатель, div будет"> stackoverflow.com/questions/28761516/< /а> - person Sujithrao; 27.02.2015
comment
@Sujithrao проверьте, я ответил на него - person Pankaj Parkar; 27.02.2015

Убедитесь, что ваш добавляемый справочный файл

angular-cookies.js

это может быть ошибка зависимости

person Ravi Babu Karikati    schedule 25.02.2015
comment
да, я добавил angular-cookies.js и angularjs-1.2.26.js cdn на свою страницу, но все равно получаю ту же проблему, что значение cookie не сохраняется. - person Sujithrao; 25.02.2015