Angular RouteProviderを別のHTMLファイルにリダイレクトします
-
21-12-2019 - |
質問
既存のウェブサイトのアプリを構築する必要がありますが、残念ながら(私のコントロールの外側)はユーザーデバイスを検出し、モバイル版にリダイレクトします。
私は同じJSファイルを再利用しようとしていますが、さまざまなHTMLファイルを再利用しようとしています。
だから私は持っています:
- desktop のindex.html>
- mobile.html for mobile
- example.com に行きます
- example.com /#/ step / age / 0 にリダイレクトを取得する
- ページを更新し、example.com /#/ step / age / 0
- example.com/mobile.html に行きます。
- example.com/mobile.html#/steps/age/0 にリダイレクトを取得します。
- ページを更新し、同じURLに滞在する代わりに、example.com/steps/age/0#/steps/age/0 になります。
両方とも私の論理を扱いたいところ、私の問題は何らかの理由でルーティングが予想されていない理由ではありません。
デスクトップ:
これは期待通りに機能します
モバイル:
これは期待通りに機能しません(ステップ番号2のようにリフレッシュされると同じURLに留まると予想される)
下記のコード:
angular
.module('profileToolApp', ["ngRoute", "ngResource", "ngSanitize"])
.config(function($routeProvider, $locationProvider){
$routeProvider
.when('/steps/:steps*', {
templateUrl : 'profile-app.html',
controller : 'example'
})
.otherwise({
redirectTo: '/steps/age/0'
});
})
.controller('example', function($scope, $routeParams, $resource, $location){
console.log("example controller");
});
.
誰かが助言することができますか? ありがとう。
解決
角度は、経路全体を調べて、それがどこにルーティングするべきかを確認します。そのため、example.com/mobile.html#/steps/age/0
が一致しない場合は、マッチングルートがありませんので、mobile.html
から/steps/age/0#/steps/age/0
を取得します。基本的な問題は、角度が一般的なものを意味するものを持たず、それをパラメータとして受け取ることです。
1つの解決策は、ルートを使用してページを区切ることです。
$routeProvider
.when('/', {
templateUrl : 'desktop.html', //was 'index.html pre edit
controller : 'example'
})
.when('/mobile/', {
templateUrl : 'mobile.html',
controller : 'example'
})
.when('/steps/:steps*', {
templateUrl : 'profile-app.html',
controller : 'example'
})
.when('/mobile/steps/:steps*', {
templateUrl : 'mobile-profile-app.html',
controller : 'example'
})
.otherwise({
redirectTo: '/'
});
})
.
コントローラは必要に応じて変わり得る。
これに対する代替案は、otherwise
を独自のAngular Appとルーティングを使用させることです。これは、Mobileに漏れているデスクトップ指令に遭遇しないため、有益な場合があります。あなたはそれにあなたのすべての指令とコントローラを注入することができますが、それでもインデックスとモバイルの素晴らしい分離を持っています。あなたはそれをさらにステップとし、mobile.html
へのリダイレクトを持つことができますが、それは異なるトピックです。
edit 私は間違えました。 mobile.html
をm.example.com
にすることは少し間違っています。 templateUrl
には、index.html
とindex.html
ディレクティブ、おそらくコントローラを含める必要があります。一般的なHTMLはそこに存在する必要があります。 ng-app
とng-view
には、それらのプラットフォームの特定のHTMLを含める必要があります。
後期として、あなたが照会作業のすべてを行うdesktop.html
と呼ばれるディレクティブを持つことができ、mobile.html
が範囲内で定義されている場合は:
$routeProvider
.when('/steps?/:steps?', {
templateUrl : 'desktop.html', //was 'index.html pre edit
controller : 'example'
})
.when('/mobile/steps?/:steps?', {
templateUrl : 'mobile.html',
controller : 'example'
})
.
しかし今、私は浪費しています、私はTBHを働かせる100%確実ではありません。 終了編集