[解決済み] コントローラでの angular-translate の正しい使用法
質問
私は angular-translate を使っています。
アプリケーションのビューごとに、専用のコントローラがあります。以下のコントローラで、ページタイトルとして表示する値を設定しています。
コード
HTML
<h1>{{ pageTitle }}</h1>
JavaScript
.controller('FirstPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
$scope.pageTitle = $filter('translate')('HELLO_WORLD');
}])
.controller('SecondPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
$scope.pageTitle = 'Second page title';
}])
翻訳ファイルの読み込みは angular-translate-loader-urlを使用しています。 拡張子を使用しています。
問題点
最初のページロード時に、翻訳キーがそのキーの翻訳ではなく、表示されます。翻訳キーは
Hello, World!
ですが、表示されているのは
HELLO_WORLD
.
2回目にそのページにアクセスすると、すべてがうまくいき、翻訳されたバージョンが表示されます。
この問題は、コントローラが値を
$scope.pageTitle
.
備考
を使用する場合
<h1>{{ pageTitle | translate }}</h1>
と
$scope.pageTitle = 'HELLO_WORLD';
を指定すると、一回目から翻訳が完璧に動作します。この問題は、常に翻訳を使用したいわけではないことです(例えば、2番目のコントローラでは、生の文字列を渡したいだけです)。
質問
これは既知の問題/制限事項ですか?どうすれば解決できますか。
どのように解決するのですか?
編集 : PascalPrecht (angular-translateの作者)の回答で、より良い解決策を参照してください。
読み込みが非同期であることが問題の原因です。ご存知のように
{{ pageTitle | translate }}
であれば、Angularは式を監視し、ローカライズデータが読み込まれると式の値が変化し、画面が更新されます。
ということは、自分でできるんですね。
.controller('FirstPageCtrl', ['$scope', '$filter', function ($scope, $filter) {
$scope.$watch(
function() { return $filter('translate')('HELLO_WORLD'); },
function(newval) { $scope.pageTitle = newval; }
);
});
しかし、これはダイジェストサイクルごとにウォッチされた式を実行することになります。これは最適ではなく、目に見えるパフォーマンス低下を引き起こすかもしれませんし、引き起こさないかもしれません。いずれにせよ、これはAngularが行うことなので、それほど悪いことではありません...
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?