【发布时间】:2017-08-23 05:20:51
【问题描述】:
在我的例子中,使用 AngularJS,我有一个 json,其中包含一些可以在控制器中使用的配置。 当我缩小应用程序并且控制器变量名称与 json 不匹配时,就会出现问题。
有没有办法不缩小单个变量?
我的代码: 设置.json
{
"settings": {
"adIndex": 3
}
}
控制器:
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;
}
}
更新
根据您的建议,我对代码进行了一些更改,但问题尚未解决。 控制器中的代码现在是:
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'];
}
}
“adIndex”如何在日志中有 2 个不同的值?
【问题讨论】:
-
这一切都取决于您如何缩小代码?你用的是什么缩小器?
-
您正在尝试将硬编码的变量名称与 JSON 返回匹配?听起来很脆弱……
-
使用字符串,例如
settings['adIndex']它不会修改那个 -
不清楚这里有什么问题。缩小后哪个名称不匹配?
-
旁注:您在这里使用的是explicit promise creation antipattern。
标签: javascript angularjs json minify bundling-and-minification