Ionic-framework: Ionic3.5.0の奇妙なURLの動作「nav / n4」および「tabs / t0 / page」

作成日 2017年07月13日  ·  53コメント  ·  ソース: ionic-team/ionic-framework

イオンバージョン:( 「x」でチェックしてください)
[] 1.x (Ionic 1.xの問題については、https://github.com/ionic-team/ionic-v1を使用してください)
[] 2.x
[x] 3.x

送信しています... (「x」でチェックしてください)
[x]バグレポート
[]機能リクエスト
[]サポートリクエスト=>ここではサポートリクエストを送信しないでください。httpshttp://ionicworldwide.herokuapp.com/のいずれかのチャネルを使用してください。

現在の動作:

Ionic3.5.0の奇妙なURLの動作
私のアプリには基本的なインターフェースがあります! LoginPage、SignupPage ...ログインまたはサインアップ後、タブインターフェイスに移動します。
まず第一に、「nav / n4」はデフォルトの動作ですか?
http:// localhost :8100 /#/ nav / n4 / login
http:// localhost :8100 /#/ nav / n4 / app / tabs / t0 / perfil / perfil

ionicgでページとタブを作成しました
そして、すべてのページに対して、たとえば次のような名前のセグメントが設定されています。
@IonicPage({セグメント: 'perfil'})

予想される行動:

http:// localhost :8100 /#/ login
http:// localhost :8100 /#/ app / perfil

再現する手順:

関連コード:

login.module.ts

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';

import {SharedModule} from '../../shared/shared.module';

import { LoginPage } from './login';

@NgModule({
  declarations: [
    LoginPage,
  ],
  imports: [
    IonicPageModule.forChild(LoginPage),
    SharedModule
  ],
  exports: [
    LoginPage
  ]
})
export class LoginPageModule {}
login.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, MenuController, LoadingController, AlertController, Events } from 'ionic-angular';

import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ControlValidator } from '../../validators/control-validator';

import { Config } from '../../config/config';

import { Storage } from '@ionic/storage';

import {UserProvider} from '../../providers/user/user.provider';
import {SocialProvider} from '../../providers/social/social.provider';

@IonicPage({
    segment:'login'
})
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

    user:any = {};
    form:FormGroup;
    submitted:boolean = false;

    private loader:any;
    private alert:any;

  constructor(
    public navCtrl: NavController,
    public menuCtrl:MenuController,
        public loaderCtrl:LoadingController,
    public alertCtrl:AlertController,
    public events:Events,
    public formBuilder:FormBuilder,
    public storage:Storage,
    public userService:UserProvider,
    public socialService:SocialProvider,
    public config:Config) {

    this.user = {
      email:'',
      password:''
    }

    this.form = formBuilder.group({
      email:[this.user.email, Validators.compose([ControlValidator.isEmailValid])],
      password:[this.user.password, Validators.compose([Validators.required, Validators.minLength(5)])]
    });
  }

  ionViewDidLoad() {
    this.menuCtrl.enable(false);
  }

  showLoading(){
    this.loader = this.loaderCtrl.create({
      content: 'Verificando as suas credenciais...'
    });
    this.loader.present();
  }

  showAlert(subtitle:string){
    this.alert = this.alertCtrl.create({
      title: 'LOGIN',
      subTitle:subtitle,
      buttons:['OK'],
      cssClass:'alert-login'
    });
    this.alert.present();
  }

  openPage(page:string){
    this.navCtrl.push(page);
  }

  private onError(err:string){
    this.showAlert(err);
  }

  login(){
    this.submitted = true;
    if(!this.form.valid){
      return;
    }
    this.showLoading();
    this.user = this.form.value;
    this.userService.login(this.user)
    .then(res=>{
        if(res) {
            this.loader.dismiss()
            .then(()=>{
              setTimeout(()=>{
                this.navCtrl.setRoot('TabsPage');
                });
            });         
        }else{

        }
    })
    .catch(this.onError);    
  }
}
tabs.module.ts

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TabsPage } from './tabs';

@NgModule({
  declarations: [
    TabsPage
  ],
  imports: [
    IonicPageModule.forChild(TabsPage),
  ]
})
export class TabsPageModule {}
tabs.ts

import { Component } from '@angular/core';
import { IonicPage, NavController } from 'ionic-angular';

@Component({
  selector: 'page-tabs',
  templateUrl: 'tabs.html'
})
@IonicPage({
    segment:'app'
})
export class TabsPage {

  perfilRoot = 'PerfilPage';
  agendaRoot = 'AgendaPage';
  newsRoot = 'NewsPage';
  ticketsRoot = 'TicketsPage';
  myFestivalRoot = 'MyFestivalPage';

  constructor(public navCtrl: NavController) {}

}

perfil.module.ts

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { PerfilPage } from './perfil';

@NgModule({
  declarations: [
    PerfilPage,
  ],
  imports: [
    IonicPageModule.forChild(PerfilPage),
  ],
  exports: [
    PerfilPage
  ]
})
export class PerfilPageModule {}

perfil.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';

@IonicPage({
    segment:'perfil'
})
@Component({
  selector: 'page-perfil',
  templateUrl: 'perfil.html',
})
export class PerfilPage {

  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad PerfilPage');
  }

}

その他の情報:

イオン情報:(ターミナル/ cmdプロンプトからionic infoし、以下に出力を貼り付けます):

global packages:

    @ionic/cli-utils : 1.4.0
    Ionic CLI        : 3.4.0

local packages:

    @ionic/app-scripts              : 1.3.12
    @ionic/cli-plugin-ionic-angular : 1.3.2
    Ionic Framework                 : ionic-angular 3.5.0

System:

    Node       : v6.5.0
    OS         : OS X El Capitan
    Xcode      : Xcode 8.1 Build version 8B62 
    ios-deploy : 1.9.1 
    ios-sim    : 5.0.13 
    npm        : 3.10.3 

最も参考になるコメント

今日からこれに取り組み始めます。

ありがとう、
ダン

全てのコメント53件

チームはこれを認識しています。
最後に確認したところ、これは他のものよりも優先度が低かった。
これもすぐに解決されることを願っています。

@AmitMY返信ありがとう
うん、私もそう願っています! ディープリンクはこの動作で問題になりますね。
あなたが知っている回避策はありますか?

問題があると思いますが、回避策が存在するかどうかはわかりません

今日からこれに取り組み始めます。

ありがとう、
ダン

どうもありがとう@danbucholtz
乾杯

@tattivitorinoありがとう、https://forum.ionicframework.com/t/url-not-reset-on-ionic-serve-live-reload/98080に同じものを投稿しました

このためのプロセスはありますか?

最新のアップグレードで修正され、

@rashnk
[email protected] --save--
それはまだ「 http:// localhost :8100 /#/ nav / n4 / start」です。

/ nav / n4 /でも同じ問題が発生しています

rashnk-これは3.5.2で確実に修正されていると言っていますか?

http://blog.ionic.io/announcing-ionic-3-5-2/のブログ投稿では直接取り上げられていませんでした。

将来、この種のことを確認できる修正の変更ログはありますか?

ありがとう :)

素晴らしいありがとう。

設定やコードで変更する必要があるものはありますか? または、JustWork™である必要があります。

:NS

この問題は、私にとって3.5.2と3.5.3の両方にまだ存在しています。

イオン情報

グローバルパッケージ:

@ionic/cli-utils : 1.5.0
Ionic CLI        : 3.5.0

ローカルパッケージ:

@ionic/app-scripts              : 2.0.2
@ionic/cli-plugin-ionic-angular : 1.3.2
Ionic Framework                 : ionic-angular 3.5.3

システム:

Node       : v8.0.0
OS         : macOS Sierra
Xcode      : Xcode 8.3.3 Build version 8E3004b 
ios-deploy : 1.9.0 
ios-sim    : 5.0.9 
npm        : 5.3.0

@rashnk 、アップグレードに成功しました。 ただし、最後のバージョンを使用して遅延読み込みページ用の新しいプロジェクトを作成する場合でも、問題は解決しません。

はい。 私は間違っていた。 URLにはまだ余分なコンテンツがありますが、私はionicserve-lを使用してChromeに取り組んでいました
問題はないようです。スクリーンショットを確認してください
g1
g2

はい、問題は予期しないURLです。

予想される行動:
http:// localhost :8100 /#/ login
http:// localhost :8100 /#/ app / perfil

@danbucholtz返信をお待ちしておりますので、私も上記と同じURLパターンで最新のIonic 3.5.3

ここでも同じ問題があります。 3.5にアップグレードした後、ディープリンクを使用するアプリ(サーバーでホストされているブラウザーアプリ)は、「nav / n4」のような魔法のURLが原因で、期待どおりに機能しなくなりました。
ionic3.5がnavパターンを変更したように見えますが、詳細なドキュメントがまもなく公開されることを願っています。
とにかく、イオンチームの努力に感謝します。

ここで同じ問題。 私たちはPWAアプリに取り組んでおり、ディープリンクは非常に重要です。

こっちも一緒。 これは私たちのリリースを保留しています。

@ larpo1可能であればダウングレードすることをお勧めします

皆さんこんにちは! ダンは現在、URLを短縮し、URLに含まれる多くの「魔法」を取り除くことに取り組んでいます。 これをすぐに準備できることを願っています。

ありがとうダン! ジャスティンありがとう!
基本的にはWebURLのように機能する必要があります

それらは次のように機能するはずです:
https://www.test.com/about

それ以外の:
https://www.test.com/#/nav/n4/about
あるいは:
https://www.test.com/#/about

こっちも一緒。

@ dev-manager-uk https://www.test.com/#/aboutについては、別のテーマです。

アプリのモジュールでlocationStrategyを変更することで、これを削除します。

@NgModule({
  imports: [
      BrowserModule,
       IonicModule.forRoot(AppComponent, {
          locationStrategy: "path", // <--- here
      }),
      ...
  ]
})

ありがとう@sergiocarneiro
やってみます!

こんにちは@ jgw96
ディープリンクを修正するためのリリースの約イータはありますか?
ありがとう :-)

この問題をカモフラージュするには、ダウングレードする必要がありました。
"npm install [email protected] --save--

これは明日公開されます。 コミットはすでにGithubにあるので、これを閉じます。

ありがとう、
ダン

はい、修正していただければ幸いです

これに問題がないかどうかはわかりませんが、この修正が加えられた夜間の3.5.3-201707251952を使用する必要があります。 また、問題がある場合は、3.6のリリース前に問題を投稿してください。

$ npm install [email protected] --save --save-exactが私のために働くことを確認できます。 ありがとう!

編集:3.6.0を使用

申し訳ありませんが、予期しない問題が発生したため、明日発送します。 早期アクセスが必要な場合は、 npm install ionic-angular@nightlyチェックしてください。 タブを使用していて、更新時に問題が発生する場合、これはシステムの既知の制限であり、APIを少し変更するだけでIonic4で修正されます。 一方では、使用することができますtabUrlPathion-tab 、それを軽減します。 基本的に、同じname/titleディープリンクsegmenttabがある場合、ここで共謀が発生する可能性があります。 それ以外は、これまでのところすべてが素晴らしく機能しています。

ありがとう、
ダン

@sergiocarneiro残念ながら、その設定を追加してもnav/n4は削除されず、そのURLに直接アクセスすることもできません。

$ npm install [email protected] --save--

@numerized代わりに3.6.0を使用できます。

やあ、
私はioniccli v3.9.2を使用していますが、URLバーにnav / n4がまだあります。
実際に私も持っています
/#/ nav / n4 / pu / loginpage / nav / n5 / pr / privatepage
私はパブリックとプライベートのナビゲーションを持っているので...

私は3.6.0を過ぎているので、大規模な問題を引き起こしていることを除いて、問題が何であるかわかりません

3.6.0イオン角度を使用する必要があります。

AmitMYに感謝します、残念ながらそれは私のためにそれを修正しません...

他に何ができますか?

screen shot 2017-09-12 at 4 32 50 pm

ここでも同じことです。私は[email protected]を使用していて、常に同じ問題を抱えています。

ionicおよびionic-angularを最新のものにアップグレードする以外に、 @ danbucholtzで他にやるべきことはありますか?
私にとっては最新のものを使用して動作します

したがって、ionc-angular 3.6.1を実行して、次のことを実行すると、次のようになります。

@NgModule({
  imports: [
      BrowserModule,
       IonicModule.forRoot(AppComponent, {
          locationStrategy: "path", // <--- here
      }),
      ...
  ]
})

わたしにはできる

みなさん、こんにちは! この号を作成してから、多くのことが起こり、変更されたようです。 以前に発生したURLの問題の一部が修正されていることがわかります。 タブシステム内にないページの場合、すべてが正常に機能します。 しかし、タブの場合はそうではありません。

ログイン、サインアップなどのいくつかのページで新しいアプリを作成しました。URLはそれらに最適です!
http:// localhost :8100 /#/ login
http:// localhost :8100 /#/ signup

(ログイン時に)タブページにアクセスすると、次のようになります。

http:// localhost :8100 /#/ tabs / tab1 / tab1
ここでは、IonicPageのセグメントもion-tabのtabUrlPathも設定していません。

http:// localhost :8100 /#/ tabs / tab-1 / tab1
ここでは、ion-tabにtabUrlPathを設定します(

http:// localhost :8100 /#/ tabs / tab-1 / tab-1
ここで私は両方を設定します
@IonicPage({
セグメント:「tab-1」
})

tabUrlPathは最初の/ tab-1セグメントに関連しており、IonicPageセグメントは2番目のセグメントであるように見えます。

それらのいずれかを取り除く方法はありますか? 両方のセグメントを持つことの意味がわかりません! 理想は次のとおりです。http:// localhost :8100 /#/ tabs / tab-1、そうですか?

それが私のシステム情報です:

`
cliパッケージ:(/ ionicv2 / appv3 / app / node_modules)

@ionic/cli-utils  : 1.12.0
ionic (Ionic CLI) : 3.12.0

グローバルパッケージ:

cordova (Cordova CLI) : 7.0.1

ローカルパッケージ:

@ionic/app-scripts : 2.1.4
Cordova Platforms  : none
Ionic Framework    : ionic-angular 3.6.1

システム:

Android SDK Tools : 25.2.5
ios-deploy        : 1.9.1 
ios-sim           : 5.0.13 
Node              : v6.5.0
npm               : 3.10.3 
OS                : OS X El Capitan
Xcode             : Xcode 8.1 Build version 8B62

`

Ionic3.9.2でも間違いなく私にとっての問題です。 私も他のタブと同じようにタブを使用しています。 必要に応じて詳細をお知らせします。

次のようなURLを取得します: http://localhost:8100/create/nav/n9/create

URLにタブ名とページ名を含める必要がないという

私が気付いたもう一つのことは、タブを使用しているときにパラメータが機能するURLを取得できないことです。
これは機能しません:
http://127.0.0.1:8100 /#/ tabs / docs / documents / 063b38ae-8edd-408b-b7fc-a346b1c16a8b
これはしますが:
http://127.0.0.1:8100 /#/ documents / 063b38ae-8edd-408b-b7fc-a346b1c16a8b

取得したいページには、次のセグメント定義があります。
segment: "documents/:documentId"

前回のコメントから3.9.2を使用してアップグレードを行ったところ、/ nav / n4 /が表示されています。 これを削除するための更新はありますか、それとも3.6.0にダウングレードする必要がありますか?

編集:これを無視してください、それはnpmの私のpackage-lock.jsonにもっと問題があったようです、 npm install --no-shrinkwrap私のpackage.jsonからのインストールを強制することはトリックをして正しくインストールするよう

3.9.2を実行しています。 問題が解決しない。

3.9.2でもこの問題が発生しています。

例:/ nav / n5 / MasterLogin

私はこれを正常に動作させてから、3.9.2も使用して/ nav /パスの作成を開始しました。

問題は、メインページに複数の/スイッチion-navがあるためであることがわかりました(イオン分割ペインを表示しようとしていたかどうか)

@mariohmolそれで問題は解決しました。 それを含めてくれてありがとう。

問題をありがとう! この問題は、元の問題に関連しないコメントを防ぐためにロックされています。 これが最新バージョンのIonicで引き続き問題になる場合は、新しい問題を作成し、テンプレートが完全に入力されていることを確認してください。

このページは役に立ちましたか?
0 / 5 - 0 評価