user2257651
user2257651

Reputation:

angularjs singleton doesn't work

In app.js I have a variable that I use in two files/controllers:

var app = angular.module('appDemo', ['MainControllers', 'MainServices'])
    .constant('myConfig', {
        'backend': 'http://localhost:1236'
    })
.service('mailService', function() {
    var mail = {
      value: 'hello world'
    };
    var getMail = function() {
      return mail;
    }
    var setMail = function(email) {
      mail.value = email;
    }
    return {
      getMail: getMail,
      setMail: setMail
    };
);

Setting the variable from controllerOne goes fine:

angular.module('MainControllers')
.controller('MemberController', function ($scope, mainService, appDemo) {

    window.onbeforeunload = function (e) {
        appDemo.setMail('[email protected]');
    };

But when I get the setting variable from the controllerTwo than I get the default value:

angular.module('MainControllers')
    .controller('EmailController', function($scope, appDemo) {

        $scope.mailAddress = appDemo.getMail();
    });

Each controller is in separate file.

what is wrong?

Upvotes: 0

Views: 45

Answers (1)

me_digvijay
me_digvijay

Reputation: 5492

This may be because the service itself is being reloaded because as I can see you are setting the mail in the first controller on onbeforeunload.

Services can't persist on window reloads or page refresh. They get reloaded hence reinitialized every time you reload the page.

If you want to persist the values try putting it in localStorage or sessionStorage.

Upvotes: 1

Related Questions