2014-02-12 6 views
3

Я пытаюсь реализовать многоязычное текстовое поле ввода с небольшой выпадающей кнопкой слева для выбора языка. Например, когда выпадающее меню показывает «de», текстовое поле должно быть привязано к model.multilingualData['de'].someField и так далее.многоязычное текстовое поле angularjs с ngmodel

Мой первый подход состоял в том, чтобы установить ngModel на model.multilingualData[selectedLanguage].someField. Но когда пользователь выбирает другой язык без правильного заполнения поля, в форме не устанавливается ошибка, так как модель теперь указывает на другой объект.

Моя следующая идея состояла в том, чтобы создать целую директиву элементов без ngModel, но тогда я не смог бы выполнить другие проверки, такие как ngMaxLength.

Я тоже не нашел ничего полезного в Интернете. Любая идея о том, как правильно это реализовать?

EDIT

Вот немного скрипки, которая иллюстрирует проблему: http://jsfiddle.net/FZ2kg/

Мало того, что появляется форма действительна при переключении языков, предыдущее значение поля также удаляются, так как модель устанавливается до null, когда поле становится недействительным.

+0

Как вы думаете, вы могли бы собрать JSFiddle, чтобы проиллюстрировать проблему? – Lukas

ответ

3

было бы неплохо, если бы вы использовали эту удивительную внешнюю директиву для мультиязычности!

https://angular-translate.github.io/

Я надеюсь, что это помогает

+0

Спасибо за подсказку. Я посмотрел на него ненадолго, но, похоже, это не помогло. Я не пытаюсь перевести строки, я ищу способ позволить пользователю переводить записи базы данных. – user2323470

+0

ваша ссылка на ссылку мертва тем временем – steven

+1

может быть легко найти, если вы ищете угловой перевод в google :) –

0

Если вам нужно иметь форму проверки для всех языковых вариаций и вы загружаете все языки сразу в вашей модели, вы не можете просто создать вход каждого язык в форме и скрыть все, кроме выбранного в данный момент языка?

Вот скрипка: http://jsfiddle.net/jvl70/w3rstmwd/5/

<form name="myForm">   
    <div ng-repeat="(lang, value) in model.multilingualData" 
    ng-show="lang==stuff.currentLanguage">    
     <ng-form name="innerForm"> 
      <div ng-class="{ 'has-error': innerForm.anything.$invalid }"> 
       <input type="text" name="anything" ng-model="value.someField" ng-maxlength="6"/> 
      </div> 
     </ng-form> 
    </div>   
</form> 

(Сначала я пытался использовать динамические имена для каждого входа, но обнаружил, что индивидуальное поле $ недействительный не было доступен для динамически именованных входов См этого поста, чтобы получить. вокруг него:.. Dynamic validation and name in a form with AngularJS в качестве альтернативы нг-формы, вы можете использовать динамические имена для каждого входа и попробовать один из пользовательских директив по ссылке)

Я думаю, если бы было много возможных языков, этот подход может медленнее, но это нормально для нескольких языков.

Смежные вопросы