根据我的选择,我无法在所需的值上设置默认选项

时间:2019-12-10 08:44:02

标签: angularjs select

我在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' },
    ...
]
});

1 个答案:

答案 0 :(得分:0)

在您的ng选项中尝试添加track by language.id

我认为以ng-model作为对象(而不是语言ID),您需要使用track by语法来帮助AngularJS唯一标识集合中的每个项目

https://docs.angularjs.org/api/ng/directive/ngRepeat#tracking-and-duplicates