这是我的控制器
app.controller('languagesCtrl', function($scope) {
var lang = window.navigator.language || window.navigator.userLanguage;
if (lang === 'it' || 'it-it' || 'it-IT') {
$scope.showcase = 'Vetrina';
$scope.products = 'Prodotti';
$scope.cta = 'Nuova collezione strumenti';
} else {
$scope.showcase = 'Showcase';
$scope.products = 'Products';
$scope.cta = 'Check out new products!';
}
});
即使我确定我的navigator.language不是'it-IT'(已检查here),我的基于角度的网站也不会使用else括号内的内容。
答案 0 :(得分:2)
你的表达总是如此,你使用||
运算符的方式。
表达评估时
第一部分(lang === 'it'
)可能是true
或false
,假设它是假的。
然后表达式变得像(false || 'it-it' || 'it-IT')
,它将始终返回返回下一个表达式值,在这种情况下它将是it-it
,所以无论如何条件将会得到满足。
将其更改为以下。
if (lang === 'it' || lang === 'it-it' || lang === 'it-IT')
OR事件简化。
if (['it','it-it','it-IT'].indexOf(lang) > -1)
答案 1 :(得分:0)
ES6解决了这个美妙的问题
我只是把它放在这里,因为将来人们会发现这一点。使用includes()
表示ES6。
['it','it-it','it-IT'].includes(language)
ES5解决方案
这个东西总是习惯让我,直到我意识到,我正在使用多个OR比较错误。所以我这样做是为了让它更具可读性。
Array.prototype.contains = function(obj) {
return this.indexOf(obj) > -1;
};
现在,您可以像这样使用它:
var language = $window.navigator.language.
if (['it','it-it','it-IT']].contains(language)) {
alert('yes');
}
这更具可读性。当然,如果你使用underscore.js,他们有以下帮助器。
_.contains([], search)