我在Angular还很陌生,但是我不知道还有什么可以解决这个问题。
我有一条消息,可以按一下按钮翻译。这一切都正常工作。就像您在图像中看到的那样,有一个可供选择的语言列表。 登录的用户具有用户语言设置。这是荷兰语,英语或法语。 (对于应用程序的常规翻译,只有3种语言。这些语言用于应用程序的标准文本。) 在选择中,有更多的语言用于消息的翻译。所有这些都正常运行,包括翻译。
我遇到的问题是,当页面加载时,我希望所选的选项成为用户的默认语言。但是它没有选择(在我的示例中为英语),而是停留在选择顶部的空白行中,并带有空的描述。当我在此后面测试代码时,它的ID为“ EN”,这意味着他实际上在加载时接收到该值,但由于某种原因,它没有选择正确的行。但是当我查看html时,其他值都像这样'STRING:EN','STRING:AM',...
我认为这是因为我使用字符串作为id,并且认为id不相同,因此创建了一个没有描述的新ID。我不确定这一切。我也尝试过手动设置默认选项,但这也不起作用。
Listbox with translate button这是图片
html页面:
<select id="languageListbox" name="LanguageSelect" style="width: 140px;"
ng-show="UI.message.iCanReply(messagedetail) && (!UI.message.actionsAreVisible(messagedetail) || UI.message.performActionsVisibleBecauseOfSize)"
tabindex="0" aria-multiselectable="false"
aria-expanded="false" role="listbox"
ng-options="language.id as language.description for language in languages"
ng-model="selectedLanguage"
ng-init="selectedLanguage.id = userLanguage">
</select>
控制器:(仅零件)
$scope.languages = myLanguages.translateLanguages;
...
function init() {
...
$scope.userLanguage = $sessionStorage.user.DefaultLanguage;
...
}
资源文件:
app.constant("myLanguages", {
"languages": [
{ id: 'NL', description: 'Dutch' },
{ id: 'EN', description: 'English' },
{ id: 'FR', description: 'French' }
],
"translateLanguages": [
{ id: 'AF', description: 'Afrikaans' },
{ id: 'SQ', description: 'Albanian' },
...
{ id: 'NL', description: 'Dutch' },
{ id: 'EN', description: 'English' },
...
]
});
答案 0 :(得分:0)
在您的ng选项中尝试添加track by language.id
我认为以ng-model作为对象(而不是语言ID),您需要使用track by语法来帮助AngularJS唯一标识集合中的每个项目
https://docs.angularjs.org/api/ng/directive/ngRepeat#tracking-and-duplicates