0

In a angularjs project, I want get user data from rails server and then use data. For this, I have a record.js and sessionService.js. I send request from record.js to sessionService.js and then recieve response.

I put js file and echo of data below:

record.js:

'use strict';
var app = angular.module('app');

app.controller('RecordCtrl',['$scope','Session','Records',function($scope, Session, Records){
    $scope.user = Session.requestCurrentUser();
    //echo $scope.user:
    //[object Object] 
}]);

sessionService.js:

    'use strict';
    angular.module('sessionService', [])
    .factory('Session', function($location, $http, $q) {
            requestCurrentUser: function() {
                if (service.isAuthenticated()) {
                    return $q.when(service.currentUser);
                    //echo service.currentUser:
                    //Object {then: function, catch: function, finally: function}
                    //catch: function (a){return this.then(null,a)}
                    //arguments: (...)
                    //get arguments: function ThrowTypeError() { [native code] }
                    //set arguments: function ThrowTypeError() { [native code] }
                    //caller: (...)
                    //get caller: function ThrowTypeError() { [native code] }
                    //set caller: function ThrowTypeError() { [native code] }
                    //length: 1
                    //name: ""
                    //prototype: Object
                    //constructor: function (a){return this.then(null,a)}
                    //__proto__: Object
                    //__proto__: function Empty() {}
                    //<function scope>
                    //finally: function (a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,f){var g=null;try{g=
    //then: function (b,f,h){var m=e(),I=function(d){try{m.resolve((P(b)?b:c)(d))}catch(e){m.reject(e),a(e)}},y=function(b){try{m.resolve((P(f)?f:d)(b))}catch(c){m.reject(c),a(c)}},F=function(b){try{m.notify((P(h)?h:c)(b))}catch(d){a(d)}};g?g.push([I,y,F]):l.then(I,y,F);return m.promise}
                    //__proto__: Object


        } else {
                    return $http.get('/api/users').then(function(response) {
                        service.currentUser = response.data.user;
                        return service.currentUser;
                        //echo service.currentUser:
                        //Object {id: 2, email: "mgh@mgh.com", created_at: "2014-08-11T08:37:59.981Z", updated_at: "2014-08-25T09:24:53.919Z"} 
                    });
                }
            },

            currentUser: null,

            isAuthenticated: function(){
                return !!service.currentUser;
            }
        };
        return service;
    });

I don't know why I can get and see data in sessionService, but I can't recieve data in record.js and use it. How can I fixed this problem?

Edit: Add app.js:

'use strict';

angular.module('app',['ngRoute', 'ngResource', 'sessionService', 'recordService'])
        .config(['$httpProvider', function($httpProvider){
            $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
            var interceptor = ['$location', '$rootScope', '$q', function($location, $rootScope, $q) {
                function success(response) {
                    return response
                };

                function error(response) {
                    if (response.status == 401) {
                        $rootScope.$broadcast('event:unauthorized');
                        scope.$apply(function() { $location.path("/route"); });
                        console.log('app 401');
                        $location.path('/users/login');
//                        $window.location.href = 'http://www.google.com';
                        return response;
                    };
                    return $q.reject(response);
                };

                return function(promise) {
                    return promise.then(success, error);
                };
            }];

//            $httpProvider.responseInterceptors.push(interceptor);
            $httpProvider.interceptors.push(interceptor);
        }])
        .config(['$routeProvider',function($routeProvider, $locationProvider){
            $routeProvider
                    .when('/',               {controller: 'HomeCtrl',    templateUrl: '<%= asset_path('templates/index.html') %>'})
                    .when('/record',         {controller: 'RecordCtrl',  templateUrl: '<%= asset_path('templates/record/index.html') %>'})
                    .when('/users/login',    {controller: 'UsersCtrl',   templateUrl: '<%= asset_path('templates/users/login.html') %>'})
                    .when('/users/register', {controller: 'UsersCtrl',   templateUrl: '<%= asset_path('templates/users/register.html') %>'})
                    .otherwise(              {redirectTo: '/'});
        }]);
mgh
  • 921
  • 3
  • 9
  • 37

1 Answers1

0

Not sure but you need to include the dependencies in the module level:

var app = angular.module('app', ['sessionService']);

I think you have two different modules and you need the data in other module then you need to provide the dependencies.

As you have defined Session factory in other file with different module and you are accessing in other file with different module, so if you want to have access the methods of other module then you need to pass the dependencies in the array part of module syntax.

Jai
  • 74,255
  • 12
  • 74
  • 103
  • I asked new question, Can you read it?http://stackoverflow.com/questions/25501458/angularjs-add-service-to-angular-module/ – mgh Aug 26 '14 at 11:49