2016-04-23 11 views
0

AngularJs。 私はこの現在のロケールでフィールドからモデルを選択する方法

animal: {name_en: "cat", name_de: "Kater", name_ru: "кот"} 

ようなモデルは、だから私は、HTMLテンプレート適切なフィールドで使用する必要があります。 このようなもの:

<div>{{ if(locale == 'en') animal.name_en }}</div> 

私はそうすることはできますか?

答えて

1

はい、AngularJSで簡単に行うことができます。あなたの構造を少し変更し、そう:)

を処理するために、動物がたくさんあるでしょうとき

ハードコードされたチェックを入れると、スケールすることは困難です。 animalsをオブジェクトの配列にします。何かのように:と仮定すると、

$scope.animals = [{name: "ABC", locale: "en"}, {name: "XYZ", locale: "de"}]; 

あなただけanimals配列を反復処理し、それに応じてレンダリングし、

$scope.selectedlocale = 'en'; 

今選択したロケールとしてenを持っている:

<div ng-repeat="animal in animals"> 
    <div ng-if="animal.locale === selectedLocale"> 
     {{ animal.name }} 
    </div> 
</div> 

ng-showは - 要素がDOMにあるようにしましょうが、隠された条件が

ng-ifを失敗した場合 - 条件はそれはあなたが持っている問題ではない場合、それは、余分なウォッチャーを追加するだけのことを失敗した場合、要素はDOMにあることがないようにしましょう。

+0

ありがとう、私はそれが動作すると思います。 しかし、あなたはどのようにロケールを手に入れますか?今私は瞬間を使用しようとしていますが、常にデフォルトのロケールを返します。 – Novikov

+1

明示的に 'en'に設定して、ユーザーが自分自身を選択してビューを更新できるドロップダウンを提供することができます。 2番目のオプションは、 'navigator.language'または' moment.locale(); ')です。 – softvar

+0

質問の要件を満たしている場合は、答えとしてマークしてください:) – softvar

0

ベターは次のようになります。

<div ng-if="locale == 'en'">{{animal.name_en}}</div> 

あなたがこの方法でいることだろう場合:NGを-場合は使用している場合、その要素にのみレンダリングされます

<div>{{ if(locale == 'en') animal.name_en }}</div> 

あなたは、div要素が常にレンダリングされますexpressionがtrueを返すとき

関連する問題