[解決済み] UI-Routerでページタイトルを設定する
2022-11-22 12:03:29
質問
AngularJSベースのアプリを、ビルトインのルーティングの代わりにui-routerを使用するように移行しています。以下のように設定しています。
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl : 'views/home.html',
data : { pageTitle: 'Home' }
})
.state('about', {
url: '/about',
templateUrl : 'views/about.html',
data : { pageTitle: 'About' }
})
});
ページのタイトルを動的に設定するためにpageTitle変数を使用するにはどうすればよいですか?組み込みのルーティングを使用すると、次のようになります。
$rootScope.$on("$routeChangeSuccess", function(currentRoute, previousRoute){
$rootScope.pageTitle = $route.current.data.pageTitle;
});
という変数があり、その変数をHTMLで以下のようにバインドします。
<title ng-bind="$root.pageTitle"></title>
ui-routerを使用してフックすることができる同様のイベントはありますか?onEnter' と 'onExit' 関数があることに気づきましたが、それらはそれぞれの状態に結び付けられているようで、それぞれの状態のために $rootScope 変数を設定するコードを繰り返す必要がありそうです。
どのように解決するのですか?
使用方法
$stateChangeSuccess
.
ディレクティブに入れればいいんです。
app.directive('updateTitle', ['$rootScope', '$timeout',
function($rootScope, $timeout) {
return {
link: function(scope, element) {
var listener = function(event, toState) {
var title = 'Default Title';
if (toState.data && toState.data.pageTitle) title = toState.data.pageTitle;
$timeout(function() {
element.text(title);
}, 0, false);
};
$rootScope.$on('$stateChangeSuccess', listener);
}
};
}
]);
そして
<title update-title></title>
デモです。 http://run.plnkr.co/8tqvzlCw62Tl7t4j/#/home
コードです。 http://plnkr.co/edit/XO6RyBPURQFPodoFdYgX?p=preview
とはいえ
$stateChangeSuccess
は
$timeout
は、少なくとも私自身がテストしたときは、履歴が正しくなるために必要でした。
編集:2014年11月24日 - 宣言的アプローチ。
app.directive('title', ['$rootScope', '$timeout',
function($rootScope, $timeout) {
return {
link: function() {
var listener = function(event, toState) {
$timeout(function() {
$rootScope.title = (toState.data && toState.data.pageTitle)
? toState.data.pageTitle
: 'Default title';
});
};
$rootScope.$on('$stateChangeSuccess', listener);
}
};
}
]);
そして
<title>{{title}}</title>
関連
-
[解決済み] 方法 $state.go()
-
[解決済み] AngularJSのディープリンクとは何ですか?
-
angularjsのルーティングについて $stateと$stateParamsの話
-
[解決済み] AngularJS: ngRouteが動作しない。
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] 入力フィールドにフォーカスを当てるには?
-
[解決済み] ng-classを使った複数クラスの追加
-
[解決済み] ui-routerでui-srefを使用してパラメータをコントローラに渡す方法
-
[解決済み】AngularJS ui-router ログイン認証
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 方法 $state.go()
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] AngularJSの.$uibModalとは何ですか?
-
[解決済み] data-ng-file-selectが動作しないのはなぜですか?
-
[解決済み] ag-gridの行の追加/削除
-
[解決済み] ajaxリクエスト時にAngularjsのローディング画面が表示される。
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] 誰かangularjsの$qサービスの使用について説明してください。[重複しています]。
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] AngularJSの部分的なビューに基づいて動的にヘッダーを変更するには?