0

In my case, using AngularJS, i have a json with some configurations that can be used in controllers. The problem happens when i minify the application and the controller variables name does not match with the json.

Is there a way to not minify a single variabe?

My code: setting.json

{
   "settings": {
      "adIndex": 3
    }
}

controller:

function settingsService($q, $http, $log) {
  var settings = {
    adIndex: 0
  };

  var service = {
    init: init,
    getAdIndex: getAdIndex
  };
  return service;

  function init() {
    var deferred = $q.defer();

    $http.get('assets/settings/settings.json').then(function(response) {
      var loaded = response.data.settings;
      if (loaded) {
        settings = angular.extend(settings, loaded);
      }
      deferred.resolve(settings);
    }, function(error) {
      $log.info('Error loading settings', error);
      deferred.reject(error);
    });

    return deferred.promise;
  }

  function getAdIndex() {
    return settings.adIndex;
  }
}

UPDATE

After your suggestions i made some changes on code, but the problem not yet resolved. The code in controller is now:

function settingsService($q, $http, $log) {
  var settings = {
    'adIndex': 0
  };

  var service = {
    init: init,
    getAdIndex: getAdIndex
  };
  return service;

  function init() {
    var deferred = $q.defer();

    $http.get('assets/settings/settings.json').then(function(response) {
      var loaded = response.data['settings'];
      if (loaded) {
        settings = angular.extend(settings, loaded);
      }
      deferred.resolve(settings);
    }, function(error) {
      $log.info('Error loading settings', error);
      deferred.reject(error);
    });

    return deferred.promise;
  }

  function getAdIndex() {
    $log.debug('Object: ', settings); // result: settings { adIndex: 3 }
    $log.debug('Value: ', settings['adIndex']); // result: 0 
    return settings['adIndex'];
  }
}

How can 'adIndex' have 2 different values in logs?

kilkus
  • 15
  • 1
  • 8

1 Answers1

0
  var settings = {
    "adIndex": 0  // quotes around the key, JSON style
  };

Not 100% sure how your minifier will handle this, but usually they can not modify string values. If the above doesn't work, you can do something slightly more verbose:

var settings = {};
settings['adIndex'] = 0;

In this case, the variable settings will be minified, but the string 'adIndex' will remain unchanged.

SteamDev
  • 4,294
  • 5
  • 20
  • 29