Ionic-framework: Ionic2 - nav.setRoot (Component) - يعمل فقط لأول مرة ، غير قادر على التنقل بعد ذلك ، لم يتم الإبلاغ عن أية أخطاء

تم إنشاؤها على ١٨ مارس ٢٠١٦  ·  100تعليقات  ·  مصدر: ionic-team/ionic-framework

وصف موجز للمشكلة:

أقوم بتطوير تطبيق باستخدام Ionic2. لدي App.ts بصفتي الوالد ، و Welcome.ts كصفحة فرعية و Featured.ts كصفحة فرعية أيضًا. لدي Firebase مدمج مع التطبيق. تم تعيين Rootpage أولاً على Welcome.

this.rootPage = Welcome;

الخطوة 1: انقر فوق زر في مرحبًا بك في authenicate مع Google ، بمجرد استدعاء onAuth ، قمت بتعيين this.nav.setRoot(Featured); كل شيء يعمل بشكل جيد حتى الآن. أحصل على صفحة "المميزة" والتي تتيح عرض قائمة جانبية بصفحات مختلفة وأنا قادر على الانتقال إليها جميعًا بلا مشكلة.

الخطوة 2: المميز يمكّن sidemenu من App.ts / html ، هناك لدي زر تسجيل الخروج الذي يستدعي unauth.
يقوم Unauth بعمل غير موثوق به في Firebase ثم:

this.menu.close();    
let nav = this.app.getComponent('nav');    
nav.setRoot(Welcome); 

الخطوة 3: تسجيل الدخول مرة أخرى كما في الخطوة 1. كل شيء على ما يرام حتى الآن.

الخطوة 4: افتح القائمة الجانبية ، وحدد أيًا من الصفحات من القائمة الجانبية ، ولا يحدث التنقل. يتم إغلاق القائمة الجانبية ولكن تظل الصفحة كما هي ، ويختفي زر رمز شريط التنقل ولا يحدث تنقل.
كود openPage:

  openPage(page) {
    //1. Loop through and set active attribute to False if it doesn't match.
    //   Set to True if it matches page title
    for(var i = 0; i < this.NavPages.length; i++) {
      if(this.NavPages[i].title == page.title) this.NavPages[i].active = true;
      else this.NavPages[i].active = false;
    }
    for(var i = 0; i < this.ActivityPages.length; i++) {
      if(this.ActivityPages[i].title == page.title) this.ActivityPages[i].active = true;
      else this.ActivityPages[i].active = false;
    }
    for(var i = 0; i < this.PreferencesPages.length; i++) {
      if(this.PreferencesPages[i].title == page.title) this.PreferencesPages[i].active = true;
      else this.PreferencesPages[i].active = false;
    }

    //2. close the menu when clicking a link from the menu
    this.menu.close();
    //3. navigate to the new page if it is not the current page
    let nav = this.app.getComponent('nav');
    nav.setRoot(page.component);
  }

ما هو السلوك الذي تتوقعه؟

أتوقع أن يستمر التنقل ، على غرار ما يحدث في الخطوة 1.

خطوات التكاثر:
تم تضمين خطوات الاستنساخ أعلاه.

Code included above.

معلومات أخرى: (مثل stacktraces ، والمشكلات ذات الصلة ، واقتراحات كيفية الإصلاح ، وروابط Stackoverflow ، وروابط المنتدى ، وما إلى ذلك)
لم يتم طرح أي خطأ للأسف. لا أرى أي أخطاء في سجلات وحدة التحكم.

أي إصدار أيوني؟ 2.x

قم بتشغيل ionic info من الطرفية / موجه أوامر cmd: (الصق الإخراج أدناه)

Your system information:

Cordova CLI: 6.0.0
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Version: 2.0.0-beta.3
Ionic CLI Version: 2.0.0-beta.19
Ionic App Lib Version: 2.0.0-beta.9
ios-deploy version: 1.8.2 
ios-sim version: 5.0.3 
OS: Mac OS X El Capitan
Node Version: v0.12.7
Xcode version: Xcode 7.2.1 Build version 7C1002 

شكرا لك.

reply

التعليق الأكثر فائدة

لماذا تم إغلاق هذه القضية؟ يبدو التنقل معطلاً حقًا. إذا قمت بدفع صفحة بها نماذج ، فلن تعمل أيضًا.

ال 100 كومينتر

لقد لاحظت ما يلي: 2 صفحات أيون موجودة في وقت واحد في dom.
screen shot 2016-03-18 at 3 34 03 pm

الذي قمت بالانتقال إليه هو "Explore" والذي يحتوي على فهرس z أقل (92) من الصفحة "المميزة". لذلك يجب أن أكون في حالة استكشاف ولكن يتم وضع "المميز" فوق "استكشاف" بمؤشر z 93.

أواجه نفس المشكلة ولكن في حالتي لا يمكنني حتى إعادة توجيهي بعد تسجيل الدخول.

إذا قمت بتسجيل الدخول بالفعل ووصلت إلى عرض تسجيل الدخول ، فسيتم تنفيذ nav.setRoot(TabsPage) بشكل مثالي.

ولكن إذا قمت بتسجيل الدخول باستخدام facebook بعد الحصول على احتمال أن المستخدم nav.setRoot(TabsPage) لا يفعل شيئًا. علاوة على ذلك ، فإن nav.push(TabsPage) لا يفعل شيئًا أيضًا ، ولكن إذا قمت بعمل nav.push(Main) حيث يكون Main أحد علامات التبويب الخاصة بي ، يتم تنفيذه بشكل صحيح ، ولكن ليس لدي شريط علامات التبويب ويظهر زر الرجوع ، بشكل واضح.

أيضًا إذا قمت بعمل nav.setRoot(Main) ، فإنه يعمل بشكل صحيح ، لكنني أضع علامة تبويب بدون علامة تبويب وزر رجوع.

أقوم بإضافة بعض المعلومات. رأيت في المستندات أن setRoot يقدم وعدًا ، لذلك فعلت هذا:

this.nav.setRoot(TabsPage)
  .then(data => {
      console.log(data);
  }, (error) => {
      console.log(error);
  })

يؤدي هذا true عندما أصل إلى صفحة تسجيل الدخول وقد قمت بتسجيل الدخول بالفعل ، ولكن لا يرمي أي شيء عندما أقوم بتسجيل الدخول باستخدام facebook ، لذلك يبدو أن الوعد لم يتم الوفاء به أبدًا.

حسنًا ، تحديث آخر. إذا انتقلت إلى جوهر Ionic2 إلى المكونات / nav / nav-controller.js في مجموعة الوظائف والصفحات التي يتم استدعاؤها من setRoot ، فلن يتم تنفيذ رد الاتصال للانتقال مطلقًا.
إذا اتبعت تدفق الوظائف المسماة: setRoot -> setPages -> _transition -> _render -> _postRender

في وظيفة _render:

this.loadPage(enteringView, null, opts, function () {
    if (enteringView.onReady) {
        // this entering view needs to wait for it to be ready
        // this is used by Tabs to wait for the first page of
        // the first selected tab to be loaded
        enteringView.onReady(function () {
            enteringView.loaded();
            _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
        });
    }
    else {
        enteringView.loaded();
        _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
    }
});

يتم إدخال الكود الخاص بي بـ enteringView.onReady ولا يتم تنفيذ رد الاتصال مطلقًا.

إذا اتصلت فقط بالطريقة _postRender قبل انتظار enteringView.onReady فإن تطبيقي يعمل بشكل جيد ، لكنه متسخ جدًا.
يبدو أن المشكلة تنتظر أن تكون صفحة علامة التبويب جاهزة. أعتقد أنه لا يستعد أبدًا أو لا يكتسب حالة الاستعداد أبدًا.

يمكن أن يكون هذا شيء مع الرمز الخاص بي؟ أو من المحتمل أن يكون خطأ؟

شكرا لك!

لدي نفس المشكلة مع مصادقة Google أو Facebook

privetr يبدو أنه تم إصلاح هذا باستخدام beta4. هل يمكنك التحقق من فضلك؟ منجم يعمل بشكل جيد الآن.

jorchg هل يمكنك التحقق أيضًا؟ عندما تحصل على فرصة :)

اهلا جميعا! نظرًا لأنه تم إصلاح هذا في الإصدار التجريبي 4 ، سأغلق هذه المشكلة ، ولكن إذا كنت لا تزال تواجه هذه المشكلة ، فلا تتردد في التعليق!

ما زلت أواجه هذه المشكلة. لا يمكنني الحصول على التنقل للدفع أو تعيين الجذر إلى TabsPage بعد وعد بتسجيل الدخول إلى Facebook.

Cordova CLI: 6.1.1
Gulp version:  CLI version 1.2.1
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-beta.4
Ionic CLI Version: 2.0.0-beta.24
Ionic App Lib Version: 2.0.0-beta.14
ios-deploy version: 1.8.5
ios-sim version: 5.0.8
OS: Mac OS X El Capitan
Node Version: v5.9.1
Xcode version: Xcode 7.3 Build version 7D175

أواجه أيضًا الموقف الذي إذا اتصلت بـ nav.setRoot (x) ، فلن تظهر الصفحة الجديدة بالفعل. ومع ذلك ، إذا ركزت على حقل إدخال في الصفحة الحالية ، فإنه يختفي ويعرض الصفحة الصحيحة.

بالإضافة إلى ذلك ، إذا ضغطت على المكدس بدلاً من setRoot ، فلن تحدث الرسوم المتحركة حتى أركز على حقل الإدخال.

نفس المشكلة.

تحرير: فقط قمت بتبديل التنقل في تطبيقي إلى قائمة جانبية وكل شيء يعمل بشكل جيد. لذلك يتم فتح علامات التبويب اعتبارًا من الإصدار التجريبي 4 لمعلوماتك.

daveshirman هل تستخدم علامات التبويب للتنقل؟ قد يكون متعلقًا بعلامات التبويب ، كانت مشكلتي متعلقة بـ sidemenu. ومع ذلك ، كلاهما يستخدم navcontroller ، لست متأكدًا من سبب نجاحه بالنسبة لي وليس من أجلك .. ربما ينتج عن ذلك plunker أو يفتح إصدارًا جديدًا وسيكون الفريق الأيوني قادرًا على المساعدة.

كنت أواجه نفس المشكلة: يبدو أن nav.setRoot(MyComponent) لم يفعل شيئًا. كنت أقوم بتشغيل التطبيق في Android باستخدام --live-reload ، وكانت هناك تحذيرات بشأن بعض الأحداث التي لم يتم إطلاقها:

0     195445   log      deviceready has not fired after 5 seconds.
1     195457   log      Channel not fired: onDOMContentLoaded

لم أتمكن أيضًا من اختبار الكود في المتصفح لأنه يتعلق بعرض صفحة معينة عندما يصبح الجهاز غير متصل بالإنترنت.

لذا حاولت أخيرًا تشغيل الكود الخاص بي في Android ، ولكن بدون إعادة التحميل المباشر ، وهو يعمل بشكل جيد.

لذلك ، هناك شيء ما حول وضع إعادة التحميل المباشر يمنعه من العمل. استخدام Beta4 كاعتمادية ، وإصدار CLI 2.0.0-beta25.

ما زلت أواجه المشكلة التي وصفتها. لقد نسيت تمامًا ، وبعد التحديث الأيوني توقف عن العمل ، لذلك قمت بتعديله مرة أخرى كما هو موضح في آخر مشاركة لي في هذا الموضوع.

هل يجب أن أفتح قضية أخرى؟

مرحبا جميعا. هل وجد أي شخص إصلاح لهذا؟ أستخدم حاليًا Ionic [email protected] وما زالت المشكلة قائمة!

لقد وجدت أن سبب مشكلتي كان استدعاء .pop () عندما تم استدعاء setRoot فقط.

لقد وجدت أن الاتصال به من app.ts يبدو أنه يعمل بشكل موثوق. يبدو أن استدعاءها من أي صفحة أخرى فشل.
بالإضافة إلى ذلك ، إذا لم أكن على صفحة جذر ، مثل 3 صفحات في العمق ، فإني أستدعي أيضًا nav.popToRoot () بعد طريقة setRoot ، والتي تعمل:

this.nav.setRoot(xxxx).then(() =>{
    this.nav.popToRoot();
    //....
});

لماذا تم إغلاق هذه القضية؟ يبدو التنقل معطلاً حقًا. إذا قمت بدفع صفحة بها نماذج ، فلن تعمل أيضًا.

ينكسر أيضًا عندما تظهر نافذة مشروطة أيضًا.
في 13 تموز (يوليو) 2016 ، الساعة 3:59 صباحًا ، كتب "scorpnode" [email protected] :

لماذا تم إغلاق هذه القضية؟ يبدو التنقل معطلاً حقًا. إذا ضغطت على الصفحة
مع النماذج الموجودة فيه لن تعمل أيضًا.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

مرحبًا ، لا يزال هذا يحدث لي في الإصدار 2.0.0-beta.10. تظهر لي شاشة فارغة بعد الاتصال بـ NavController.setRoot. يحدث فقط على أجهزة iOS

معلومات الجهاز:

  • الموديل: iPad5،4
  • إصدار iOS: 8.3

أواجه هذه المشكلة في الإصدار 2.0.0-beta.10 . لا يمكنني الانتقال إلى الصفحة التالية عن طريق NavController.setRoot. يبدو الرمز الخاص بي كما يلي:

this.nav.setRoot(somepage).then(() =>{
     this.nav.popToRoot();
});

معلومات الجهاز:

  • الموديل: motorala x play
  • نسخة أندرويد: 6

CLI v2.0.0 بيتا 32.

لا تزال تواجه مشكلات مع
this.nav.setRoot(ListPage)
من hello-ionic.ts في التطبيق التعليمي للمبتدئين.

كنت أرغب في تجربة تسجيل الدخول إلى FB والذي تم إجراؤه بسهولة باستخدام الإصدار 2.0.

اي شخص اخر؟

[تعديل]
كنت أستخدم
import {Nav} from 'ionic-angular';
بدلا من
import {NavController} from 'ionic-angular

حل مشكلتي. أتمنى أن يساعد ذلك أي شخص

وجود نفس المشكلة هنا!
هل هناك أي إصلاح حتى الآن؟

مرحبًا بالجميع ، إذا كان بإمكان شخص ما تقديم مكدس يوضح هذه المشكلة فسيكون ذلك رائعًا. شكرا لاستخدام Ionic!

اهلا جميعا! كما يبدو ، فقد مضى بعض الوقت منذ أن كان هناك أي نشاط بشأن هذه المشكلة ، وسوف أقوم بإغلاقه في الوقت الحالي. لا تتردد في التعليق إذا كنت لا تزال تواجه هذه المشكلة. شكرا لاستخدام Ionic!

آسف لعدم الرد ، كنت في إجازات

يبدو أن مشكلتي كانت مرتبطة بـ cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4

عندما قمت بتحديث مشروعي إلى الإصدار التجريبي 10 وبدأت في استخدام غلاف Facebook من أصل أيوني ، توقفت المشكلة للتو. غريب جدًا ، مع الأخذ في الاعتبار أن الغلاف يستخدم نفس المكون الإضافي.

شكرا جزيلا لك!

لا مشكلة ، سعيد أنه تم إصلاحه لك!

يا @ jgw96 ! لسوء الحظ ، لا يزال هذا يمثل مشكلة بالنسبة لي في الإصدار التجريبي 10. يمكنك رؤية هذا في plnkr أدناه. على نحو فعال ، لديّ نموذج تسجيل دخول يقوم بتعيين الجذر إلى صفحة "علامات تبويب" بمجرد تسجيل الدخول بنجاح. من صفحة في "علامات التبويب" لدي زر "تسجيل الخروج" ، والذي يطلق حدثًا يتم استهلاكه في app.ts. في app.ts أحاول ضبط الجذر على "تسجيل الدخول" ، ولكن لا يبدو أن شيئًا قد حدث. عند النظر إلى DOM أثناء النقر فوق "تسجيل الخروج" يمكنني رؤية الأشياء قيد التشغيل ، وتوجد صفحة تسجيل الدخول أسفل علامات التبويب ، ولكن لا يبدو أن التنقل يحدث. أيه أفكار؟

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

شكرا على وقتك!

لقد قدمت إصدارًا جديدًا لهذا # 7593. ينطبق على الإصدار 2.0.0-beta.10 و 11 ، وربما الآخرين.

لدي نفس المشكلة مع بيتا 11.
يبدو أن التنقل يعمل بشكل جيد حتى يتم استدعاء this.nav.setRoot (xxx). بعد ذلك ، يعمل التنقل بشكل عشوائي ... عند الضغط على صفحة جديدة ، لا يحدث شيء في بعض الأحيان: يبقى العرض على الصفحة الحالية بدلاً من الصفحة الجديدة. عند الظهور ، يبدو أن التنقل في أوقات أخرى ينبثق مرتين.
يبدو أن كل شيء صحيح مع كائن NavController وكل شيء يعمل بشكل طبيعي. لكن يبدو أن هناك ارتباكًا في DOM: قيم خصائص الفهرس z لعلامات صفحة أيون خاطئة في هذه الحالات ، لذا تظل الصفحة الخطأ أعلاه.

أرى نفس السلوك تمامًا مثل Troknus فيما يتعلق بظهور الصفحة المزدوجة والارتباك في DOM.

في المرة الأولى أيضًا ، setRoot ، ثم عند التنقل التالي ، تومض صفحة الجذر الأولية ، كما لو لم يتم إلغاء تحميلها بالكامل من قبل.

لدي مشكلة Troknus أيضًا أحاول إضافة فئة عرض الصفحة يدويًا والوظيفة ولكنها ليست حلاً جيدًا.

أبحث في جميع المواقع ولكن لا شيء. أحاول كل الحلول الممكنة ولكن كل شيء في ريح.

في الإصدار التجريبي 10. يعمل التنقل بشكل مثالي. لماذا ليس في بيتا 11.

أرى نفس السلوك مثل Troknus أيضًا.

يا رفاق ، لديهم نفس المشكلة كما قال jorchg .. مع الأخذ في الاعتبار خطأ علامات التبويب .. إنه يدفع فقط إلى علامات التبويب بعد المرة الثانية التي يستدعيها (يبدو أن الدفع يحدث ولكن الصفحة الحالية لا تزال في المقدمة)

بعد تسجيل الدخول ، إذا حاولت الدفع إلى عرض علامات التبويب ولكن لا تفكر .. إذا ضغطت على صفحة من المفترض أن تكون في علامة تبويب .. فهي تعمل .. ها هو المشروع

لدي نفس مشكلة Troknus

تم تحديث schaergeek إلى الإصدار التجريبي 11 وقد نجح .. وإليك المثال https://github.com/mariohmol/ionic2-meteor-messenger-password

لقد أعربت عن إعجابي بـ Troknus ، لكنني أعتقد أن المنشور أكثر وضوحًا.

هذا التنقل مشكلة حقيقية.
لا يُسمح لنا (وأفترض الكثير من الأشخاص الآخرين) بالتحرك في الإنتاج مع هذا الخطأ.
(نحن نعمل في الإصدار التجريبي 11 مثل Troknus ولدينا نفس الشيء ...).

ألقيت نظرة على plnkr بواسطةjoshgarwood. نشر الحدث يبدو أن القضية؟ إذا بدلاً من نشر حدث المصادقة لجعل MyApp يقوم بالعمل ، فإنك بدلاً من ذلك تقوم بتعيين الجذر عبر مثيل NavController داخل TabPage ، ثم يعمل. محاولة تعيين الجذر عبر مستمع الحدث في MyApp لا تفعل ذلك. لذلك يبدو لي أنه مشكلة في مثيلات NavController المختلفة التي يتم حقنها ...؟ لست متأكدًا من الكيفية التي من المفترض أن يعمل بها DI هنا ، لكني أشعر أنه لا ينبغي للمستهلك أن يهتم بمثيل NavController الذي يتم حقنه. إذا اتصلت بـ setRoot (*) ، فمن المفترض أن تعمل الأشياء ، أليس كذلك؟

فيما يتعلق بمشكلة Z-index التي يتحدث عنها Troknus ، قد تكون مهتمًا جميعًا بالإصدار رقم 8042. رغم أنه في هذه الحالة لا يتم استدعاء setRoot (*) على الإطلاق.

في الواقع ، لقد قرأت للتو تعليق @ jgw96 ويبدو أنه ليس من المفترض أن تستخدم مثيلات NavController العشوائية ...؟

ومع ذلك ، هذا لا يغير حقيقة وجود خطأ في مؤشرات Z.

نفس المشكلة هنا مع beta11 ...

هل لدى أي شخص plnkr مختلف من شأنه أن يعيد إنتاج DOM الذي يتم الخلط بينه وبين الصفحات التي تومض؟ لا يتضمن plnkr بواسطة joshgarwood الدفعات أو الملوثات العضوية الثابتة.

rcjsuen واجهت نفس المشكلة في Beta10 و Beta11 ، اكتشفت هذا الحل البديل. لست متأكدًا مما إذا كان setRoot يعمل على النحو المنشود ولكن هذا يعمل في الوقت الحالي.

لا يعمل

  private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.nav.setRoot(TabsPage);
        } else {
          this.nav.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }
}

عمل

 private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.setRoot(TabsPage);
        } else {
          this.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }

  private setRoot(newRootPage: any){
    this.rootPage = newRootPage;
  }
}

Vanclief لديك نفس المشكلة - ولكن حتى هذا الحل الذي اقترحته لم ينجح معي.
كان الكود الخاص بي كما هو لك في البداية - ثم حاولت الترقية إلى الإصدار الأيوني 2 rc0 والزاوي 2.0.1 ، لكن هذا لم يعمل بشكل جيد مع Firebase (أو angularfire) ، لذلك عدت إلى:

{
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "^0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angular/router": "^2.0.0-rc.2",
    "firebase": "^3.3.0",
    "ionic-angular": "2.0.0-beta.11",
    "ionic-native": "1.2.2"
}

تم حذف node_modules / لم يتم تثبيت npm والآن أواجه هذه المشكلة.

الغريب في هذا هو أنني إذا قمت بتعيين this.rootPage على شيء خارج وظيفة رد الاتصال ، فحينئذٍ ينتقل التطبيق إلى تلك الصفحة. على سبيل المثال

        this.setRoot(TeamPage);

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

سينتقل المستخدم إلى TeamPage ثم ينقل المستخدم إلى صفحة تسجيل الدخول (في الحالات التي لا يقوم فيها المستخدم بتسجيل الدخول)

ومع ذلك

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

لن تنقل المستخدم في أي مكان

@بيتر بايبر

لم أقم بالتحديث ، لكن ظللت أواجه بعض المشكلات التي اختفت بمجرد الترقية إلى RC0. بالنسبة إلى أحد مشاريعي ، أستخدم أيضًا Firebase وواجهت بعض المشكلات في التحديث ولكن الآن كل شيء يعمل.

لا أستخدم AngularFire ، لكن هذا البرنامج التعليمي يغطيها: https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

تحرير: هنا مثال سريع قمت بعمله

تضمين التغريدة

شكرًا ، لقد جربت هذا النهج بالفعل - وقد نجح بالفعل. لكن حقيقة أنني يجب أن أقوم باختراق وحدة عقدة مقترنة بتحطم RC_0 الأيوني عند مشاهدة الملفات عند القيام بـ ionic serve جعلني أجهض الترقية وألتزم بالإصدار الأقدم.

على أي حال ، لقد قمت بحل المشكلة المذكورة أعلاه حيث لا يعمل تعيين صفحة جذر في رد اتصال ما لم يتم تعيينها من قبل ، عن طريق التحقق مما إذا تم تعيين firbase.auth.currentUser ثم تعيين صفحة الجذر

        const page = firebase.auth().currentUser ? TeamPage : LoginPage;
        this.setRoot(page);

        firebase.auth().onAuthStateChanged(user => {
            // If there's a user take him to the Teams page otherwise send him to LoginPage
            const page = user ? TeamPage : LoginPage;
            this.setRoot(page);
        });

ثم إجراء فحص في طريقة setRoot حتى لا ينتقل إلى نفس الصفحة مرتين.

هذا أيضًا اختراق ولا يعالج المشكلة الأساسية. لسوء الحظ ، ليس لدي الوقت للدخول في تحقيق متعمق حول المشكلة الأسبوع المقبل.

هذا لا يزال يمثل مشكلة. يعمل استخدام this.nav.push (...) بشكل جيد ، لكن استخدام this.nav.setRoot (...) لا يعمل بعد المرة الأولى. ها هي معلوماتي الأيونية:

Your system information:

Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.1
Gulp local:  
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.1.0-beta.1
OS: Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS 
Node Version: v4.6.0

من package.json

  "dependencies": {
    "@ionic/storage": "^1.0.3",
    "firebase": "^3.4.1",
    "ionic-angular": "^2.0.0-rc.0",
    "ionic-native": "^2.2.2",
    "ionicons": "^3.0.0"
  },

@ jgw96 لماذا هذا مغلق؟ من الواضح أن هذه حالة مفتوحة لأن setRoot لا تعمل بشكل صحيح.

daveshirman ، كنت أواجه نفس المشكلة ، إنها ليست مشكلة ملاحة ، ولكن إليك كيفية حلها.

في app.ts الخاص بي هو هذا

firebase.initializeApp (التكوين) ؛

platform.ready().then(() => {
  firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      // If there's a user take him to the TabsPage page.
      this.rootPage = TabsPage;
    } else {
      // If there's no user logged in send him to the LoginPage
      this.rootPage = LoginPage;
    }
  });
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  StatusBar.styleDefault();
});

العبارة if أعلاه تقول // إذا كان هناك مستخدم اضبط صفحة الجذر على صفحة TabsPage.
وإلا فإنه يجب أن يظل في صفحة تسجيل الدخول ، ستلاحظ أنه إذا استخدمت طريقة تسجيل الدخول العادية إلى Firebase ، فسيتم تنفيذ جزء if (أي أنه سينتقل إلى صفحة الجذر ، ولكن عند استخدام Facebook ، سيتم تنفيذ الجزء الآخر (أي يبقى على صفحة تسجيل الدخول

لقد حللت ذلك على هذا النحو.
تسجيل الدخول الى الفيسبوك() {

// تسجيل الدخول إلى الفيسبوك
Facebook.login (['email']). ثم ((النتيجة => {
// تعيين بيانات الاعتماد ، ستستخدمها لتسجيل الدخول إلى Firebase
السماح ببيانات الاعتماد = firebase.auth.FacebookAuthProvider 'بيانات الاعتماد'
// تسجيل الدخول إلى firebase ، هذا هو ما يمنع التنقل للعمل ، مما يؤدي إلى مسار ELSE الخاص بـ // البيان في app.ts للتنفيذ
إرجاع firebase.auth (). SignInWithCredential (أوراق الاعتماد) ؛
})) ثم ((المستخدم) => {
//alert(firebase.auth().currentUser.uid) ؛
this.userProfileRef.child (firebase.auth (). currentUser.uid) .set ({
المعرّف: firebase.auth (). currentUser.uid ،
البريد الإلكتروني: user.email ،
اسم العرض: user.displayName ،
profilePictureURL: user.photoURL
}) ؛

   this.navCtrl.setRoot(TabsPage);
}).catch((error)=>{
  alert(error);
})

}

ما حدث في الكود أعلاه هو أن ،
أولاً ، تحتاج إلى تسجيل الدخول إلى facebook ، وهو ما قمت به
Facebook.login (['email']). ثم ((النتيجة =>

ثانيًا ، تحتاج إلى تعيين بيانات اعتماد ستساعدك على تسجيل الدخول إلى Firebase باستخدام accessToken الذي أرسلته لك نتيجة تسجيل الدخول إلى Facebook وهو ما فعلته هنا
السماح ببيانات الاعتماد = firebase.auth.FacebookAuthProvider 'بيانات الاعتماد' ؛
ثالثًا ، تحتاج إلى تسجيل الدخول إلى Firebase باستخدام بيانات الاعتماد التي قمت بتعيينها ، وهذا ما فعلته هنا
إرجاع firebase.auth (). SignInWithCredential (أوراق الاعتماد) ؛
ملاحظة: هذا هو السبب الدقيق لماذا الخاص بك this.navCtrl.setRoot (TabsPage)؛ لم تنجح (لأن المستخدم لم يسجل الدخول بعد على Firebase.

لذلك يمكنك الآن الانتقال إلى rootPath في مسار () الرمز.

ويرجى التأكد من تكوين معرف التطبيق الخاص بك على facebook و appSecrete على firebase> المصادقة> لوحة facebook.

نأمل أن تكون هذه المساعدة

OyebisiJemil شكرًا على شرحك الطويل لما فعلته. لكنني كنت أعني أنني كنت أواجه نفس المشكلة من الناحية المفاهيمية في أن setRoot لا تعمل بشكل صحيح ، وليس باستخدام facebook أو أي شيء. شكرا مرة أخرى على الرغم من. لا ينبغي إغلاق هذه المشكلة ، ما لم يكن هناك فتح آخر بنفس الوصف.

الذي يبدو أنه يوجد:

https://github.com/driftyco/ionic/issues/8453

أنا أيضًا أعالج هذه المشكلة بظروف مشابهة جدًا. في حالتي ، أدى التبديل إلى الدفع (عرض) بدلاً من setRoot (عرض) إلى حل المشكلة ولم يكن الأمر كذلك مع تدفق تطبيقي.

لدي نفس المشكلة. nav.push (view) يعمل بشكل جيد لكن nav.setRoot لا يعمل. هل حصل أي شخص على أي اقتراحات؟

ما زلت أواجه نفس المشكلة حتى اليوم في أحدث إصدار:

تسجيل خروج() {
this.authData.logoutUser (). ثم (() => {
this.nav.setRoot (تسجيل الدخول) ،
}) ؛
}

لا يعمل. الرجاء المساعدة. Thnx. ليس

استخدام دفع insted من setRoot ...

@ jgw96 ، adamdbradley هذه لا تزال مشكلة رئيسية. يرجى إعادة فتحه وتعيين معلم. يواجه العديد من الأشخاص هذه المشكلة ، بمن فيهم أنا ، وهي وظيفة أساسية لتطبيق ما.

dejancencelj هذا ليس حلاً لهذه المشكلة.

lisaiceland للتغلب على هذه المشكلة اتبعت هذا الاقتراح:
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15؟u=niallr

@ niallr12daveshirman ألا تزال هذه مشكلة في RC3؟

manucorporat لست متأكدًا مما إذا كانت هذه مشكلة في RC3 لكنني لا أرى إصلاحًا لها في سجل التغيير. أنا سعيد بإصلاحي وأشعر أنه نهج أفضل بشكل عام على أي حال.

يمكنني اختبار لك في RC3 إذا أردت.

@ niallr12 حسنًا ، لم أتمكن مطلقًا من إعادة إنتاج هذه المشكلة بالذات. لكنني أمضيت أسابيع في تقوية NavController ، مع الكثير من الإصلاحات والاختبارات الصغيرة. مثل هذا: أسوأ حالة تشدد على حزمة التنقل بتدفق مجنون.

سأكون مفيدًا جدًا إذا كان بإمكانك اختبار هذا الخطأ ضد RC3.

manucorporat لا يزال بإمكاني تكرار المشكلة في rc3. في حالتي الخاصة ، لا يبدو أنه يرفض العرض الحالي عندما أقوم بتعيين الجذر. إذا رفضت العرض الحالي ثم قمت بتعيين الجذر ، فسيعمل بشكل جيد. دفع العرض يعمل بشكل جيد تمامًا.

مهلا،

لست متأكدًا مما إذا كانت إجابتي ستساعد أي شخص لأنني لم أقرأ جميع الرسائل السابقة ، ولكن عندما واجهت مثل هذه المشكلة في مشروعي ، قمت بحلها بالرجوع إلى حزمة التنقل الرئيسية ، ولهذا السبب تمكنت من العودة إلى صفحة الترحيب على سبيل المثال:

صفحة الترحيب (صفحة الجذر)

gotoFeature(): void {
  this.navCtrl.push(feature);
}

صفحة الميزات ( مع علامات التبويب )

logout(): void {
  this.navCtrl.parent.parent.pop() //  back to welcome
}

يجب التعامل معها بهذه الطريقة نظرًا لأن علامات التبويب لها مكدس تنقل خاص بها ، مما يعني أن كل استخدام لـ setRoot في مستوى كائن التنقل في علامات التبويب سيعيد التوجيه إلى صفحة مختلفة ولكن ستظل كتلة علامات التبويب في التذييل مرئية.

لماذا تم إغلاق هذه القضايا؟ لدي نفس المشكلة. أنا أستخدم وظيفة setRoot في مزود العينة الخاص بي. تم تعطيل التطبيق setRoot والصفحة التي تم تغييرها ولكن التنقل (القائمة) عند الانتهاء.

إنه الكود الخاص بي في المزود

private _leaveGroup(user: modelUser, room: modelRoom): Promise<any> {
    return new Promise((resolve, reject) => {
      let loading = this.loadingCtrl.create({dismissOnPageChange: false});
      loading.present();

      this.ref.child(room.id).child('users').child(user.id).remove()
        .then(() => this.navCtrl.setRoot(PageDashboard))
        .then(() => loading.dismiss())
        .then(() => resolve())
        .catch(err => loading.dismiss().then(() => reject(err)));
    });
}

إنها معلوماتي

كوردوفا CLI: 6.3.1
إصدار الإطار الأيوني: 2.0.0-rc.3
إصدار أيوني CLI: 2.1.4
إصدار ليب التطبيق الأيوني: 2.1.2
إصدار البرامج النصية للتطبيق الأيوني: 0.0.45.1
إصدار iOS: 1.9.0
إصدار ios-sim: 5.0.9
نظام التشغيل: Mac OS X Sierra
إصدار العقدة: v6.9.1
إصدار Xcode: Xcode 8.1 Build الإصدار 8B62

كان لدي نفس المشكلة. ولكن بعد أن تأكدت من أنه في أي وقت إذا تم تنفيذ عبارة setrroot فقط ، فإن كل شيء يعمل بشكل مثالي. ولكن لسبب مختلف إذا تم تنفيذ العديد من عبارات setroot في أي وقت معين ، أي قبل التصيير ، فإن Ionic تقوم بإنشاء مستحقات صفحات متعددة يتم تعليق التنقل عليها في حالتي.

يبدو أن هذه المشكلة قد تحوّلت إلى شيء غريب في RC4. نفس نوع المشكلة باستثناء أنه عند تعيين الجذر الآن من صفحة تسجيل الدخول المختبرة إلى قائمة / لوحة تحكم ، تظل صفحة تسجيل الدخول في حزمة العرض التي تعرض زر الرجوع في الرأس ، مما يتسبب في جميع أنواع الفوضى

أجد نفسي مضطرًا للقيام بموقع. إعادة التحميل لحساب هذا الذي أعتقد أنه ليس تجربة مستخدم مروعة لأنه يحدث فقط أثناء تسجيل مستخدم جديد ، ولكن لا يزال ... لا أفهم سبب إغلاق هذه المشكلة لأن الكثير من لا يزال الناس يواجهون المشكلة.

أقوم بإنشاء حدث لتسجيل الخروج.

// app.component.ts
events.subscribe('logout', () => {
  localStorage.removeItem('token');
  this.rootPage = LoginPage;
 });

الآن تسجيل الخروج:

// pages/home/home.ts
  logout() {
    this.events.publish('logout');
  }

مرحبا جميعا. هل وجد أي شخص إصلاح لهذا؟ أستخدم حاليًا Ionic 2.0.0-rc.4 وما زالت المشكلة قائمة!

مرحبا،

// استيراد هذه الفئات
 استيراد {Component، ViewChild} من "@ angular / core" ؛
 استيراد {النظام الأساسي ، MenuController ، Nav} من "ionic-angular" ؛

 فئة التصدير MyApp {
 // تعيين هذه الخاصية
 ViewChild (Nav) nav: Nav؛

 // تنفذ هذه الطريقة وتعمل على أكمل وجه
 openPage خاص (الصفحة: أي): أي {
 // تحقق من الرمز المميز 
 this.loggedIn = this.service.canActivate () ،
 إذا (! this.loggedIn) {
 // غير مسجّل 
 this.nav.setRoot (تسجيل الدخول) ،
 } آخر {
 // مسجل
 this.nav.setRoot (الصفحة الرئيسية) ،
 }
 this.menuCtrl.close () ،
 }

عناق!

تطبيقي: https://github.com/siteslave/chiangmai-demo-app/blob/master/src/pages/main/main.ts#L96 -L100

import {
  ...
  App,
  ...
} from 'ionic-angular';

//=====================//
 logout() {
    localStorage.removeItem('token');
    let nav = this.app.getRootNav(); 
    nav.setRoot(LoginPage);
  }

هل وجد أي شخص على الأقل حلاً لهذا؟

نفس العدد مثل @ joshuaohana.

إذا قمت بتعيين الجذر قبل تسجيل الدخول إلى facebook ، فسيعمل كل شيء كما هو متوقع.
إذا قمت بعمل setRoot بعد facebook ، فسأحصل على نفس السلوك مثلjoshuaohana.

شكرا.

(وجدت هذه النسخة المكررة للتو: https://github.com/driftyco/ionic/issues/6297)

إنشاء حدث لأعمال تسجيل الخروج.

يمكنك أيضًا العثور أدناه على شرح تفصيلي حول التنقل باستخدام حل عملي آخر

https://webcake.co/exploring-nav-hierarchy-in-the-ionic-2-tabs-page/

الجزء الأكثر قيمة من الكود الذي تم لصقه أدناه.

استيراد {التطبيق} من "الزاوية الأيونية" ؛
...
مُنشئ (تطبيق _app خاص: تطبيق) {}

تسجيل خروج() {
...

    // Now I'll access the root NavController for the app,
    // and use that to reset the nav stack

    const root = this._app.getRootNav();
    root.popToRoot();

    // since I only have two items in the root NavController,
    // I could also have run root.pop() instead

}
...

ربما ارتكب بعضكم نفس الخطأ مثلي:

لقد استخدمت التنقل عبر "setRoot" ولكن فاتني أنه في نفس الوقت يظل الرابط "[root] = .." متاحًا في قالب HTML. أدى إحضار المعلمتين في تزامن مرة أخرى إلى إصلاح مشكلتي. في هذه الحالة ، قمت بإزالة ربط النموذج وقمت بإدارة الجذر فقط عبر واجهة برمجة التطبيقات (API).

مع تحياتي ، مايكل

أهلا يا أصدقاء،

حل @ ly- ديف يعمل بالنسبة لي. لقد فعلت للتو this._app.getRootNav().setRoot(EntryPage); وهو يعمل.

أولاً ، قم باستيراد Nav من الزاوية الأيونية ، نفس المكان مثل navController
import { App, NavController } from 'ionic-angular';

ثم قدمها في المنشئ الخاص بك:
constructor(public navCtrl: NavController, public appCtrl: App)

الآن يمكنك الوصول إلى rootnav:
this.appCtrl.getRootNav().setRoot(YourComponent);

AmitPoojary هذا الحل لم ينجح. عندما ينتقل المستخدم إلى علامات تبويب متعددة.

مثال : علامة التبويب "الصفحة الرئيسية" مع صفحات متعددة. عندما ينقر المستخدم للوصول إلى صفحات متعددة. بعد ذلك ، لا تعود ولكن تنتقل إلى علامة التبويب "الحساب" ثم تقوم بتسجيل الخروج وستظل في علامة التبويب "الحساب" حتى التحديث.

لقد اكتشفت ما إذا كان المستخدم ينقر على علامة التبويب "الصفحة الرئيسية" ولم يذهب إلى أبعد من ذلك فسوف يقوم بتسجيل خروج المستخدم بشكل صحيح.

أعتقد أن الأمر كله يتعلق بالوصول إلى العديد من علامات التبويب في dom & getRootNav لن يعود إلى هذا الحد عندما ينتقل المستخدم إلى الصفحة الثانية في علامة التبويب الرئيسية.

وما زالت هذه المسألة.

نعم ، لا تزال مشكلة بالنسبة لي لأنني أستخدم علامات التبويب بصفتها الصفحة المقصودة الرئيسية للتطبيق. من خلال استدعاء _navCtrl.setRoot () من أي من الصفحات الموجودة داخل tabComponent ، يتم تعيين تلك الصفحة فقط إلى صفحة الجذر بينما تظل واجهة علامة التبويب في الجزء السفلي في مكانها. هذا يتيح لي الاستمرار في الوصول إلى الصفحات الأخرى في علامة التبويب!

image

الحل الصحيح لذلك هو:

let _nav = this.app.getRootNav(); _nav.setRoot(LoginPage);

أو سطر واحد

this.app.getRootNav().setRoot(LoginPage);

لدي أيضًا مشكلة مماثلة في تطبيقي الجديد ، يعمل تطبيقي فقط بالدفع الأول للجهاز ، حيث أقوم بإجراء اتصال بالمقبس وأجري بعض اتصالات المقبس. أوقفت التطبيق ، وأقطع الاتصال بجهاز الكمبيوتر الخاص بي ، وأعد تشغيل التطبيق ، ولم أر أي نشاط اتصال على جانب الخادم. لم أقم بتنفيذ توصية uiktiomasfeliz ، وسأحاول ذلك لاحقًا اليوم. لكن فقط تنبيه.

نعم. لقد أنجزت الشيء نفسه أيضًا مع:

this.app.getRootNav().setRoot(SetupPage);

ومع ذلك ، فإنه يكسر مسارات الصور على الأجهزة ...

(getRootNav) مهمل وستتم إزالته في الإصدار الرئيسي التالي. استخدم getRootNavById بدلاً من ذلك.

لذلك ... لم يتم إصلاح هذا الخطأ ولم يعد التصحيح السابق يعمل ..: /

this.app.getRootNav().setRoot(LoginPage);

هذا ليس استيقاظي ...

تم حل هذا مع الإصدار 3.5.3 بالنسبة لي على الأقل

welp ، 3.5.3 لم يصلحها بالنسبة لي.

الرجال وما زالوا يعانون من هذه المشكلة الشريط الجانبي لا يعمل بعد setRoot () ؛

أنا فقط استخدم هذا: this.navCtrl.setRoot (HomePage) ؛

لقد جربت كل الحلول هنا ولكن ما زلت أواجه هذه المشكلة
أيوني 3.10.3

لقد حللت من هذا القبيل

استيراد التطبيق

استيراد {IonicPage، NavController، Nav، App} من "الزاوية الأيونية" ؛

وتستخدم الآن

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("LoginPage");

مرحبًا ، أقوم باختبار تطبيق hello world على iPhone4 وبعض الأجهزة الأخرى التي تعمل بنظام Android.

الإصدار الأيوني الأخير و CLI.

المشكلة الرئيسية الكبيرة هي مع iPhone ، لا تعمل المكالمة لـ setRoot.

باطل onGoClick () {
// هذا السطر لا يفعل شيئًا ولا يتم إلقاء أي خطأ.
this.navCtrl.setRoot (HomePage) ،

// هذا السطر لا يفعل شيئًا ولا يتم إلقاء أي خطأ.
this.app.getRootNav (). setRoot (HomePage) ؛
}

هذا أيضا لا يعمل

var root = this.appCtrl.getRootNav () ،
root.setRoot (الصفحة الرئيسية) ،
root.popToRoot () ،

مع تحياتي.

مرحبًا alemdg ، أعتقد أن هذه هي الطريقة التي تستدعي بها المسارات ، على سبيل المثال إذا حددت مثل نص أو كائن ، أيا كان ،

إذا كنت تريد تجنب المشاكل ، اتصل كنص ("الصفحة الرئيسية") وأنشئ هذا المتغير

الجذر الثابت = this.app.getRootNav () ،

واتصل بالطريقة التالية

الجذر الثابت = this.app.getRootNav () ،
root.popToRoot () ،
root.setRoot ("الصفحة الرئيسية") ،

استيراد هذا الكائن

استيراد {IonicPage، NavController، NavParams، Nav، App} من "الزاوية الأيونية" ؛

البناء(
التطبيق العام: التطبيق
) {

الأول هو popToRoot والثاني تحديد الجذر الجديد ؛)

باطل onGoClick () {
// هذا السطر لا يفعل شيئًا ولا يتم إلقاء أي خطأ.
this.navCtrl.setRoot ("HomePage") ؛

// هذا السطر لا يفعل شيئًا ولا يتم إلقاء أي خطأ.
root.popToRoot () ،
root.setRoot ("الصفحة الرئيسية") ،
}

هذا أيضا لا يعمل

الجذر الثابت = this.appCtrl.getRootNav () ،
root.popToRoot () ،
root.setRoot ("الصفحة الرئيسية") ،

spidermay شكرا على الإجابة ولكن ما زلت لا تعمل.

لقد استوردت
استيراد {IonicPage، NavController، NavParams، Nav، App} من "الزاوية الأيونية" ؛

ونُفذت
الجذر الثابت = this.app.getRootNav () ،
root.popToRoot () ،
root.setRoot ("الصفحة الرئيسية") ،

ولكن إذا قمت بالنقر فوق الزر مرتين ، فإنه يعمل ....

مثل بعض التحديثات مفقودة ....

أرى هذا في 3.7.1.

استخدم الكود التالي الذي يجب أن يعمل به أو يعطيك رسالة خطأ

this.menu.close () ؛
this.nav.setRoot (HomePage). ثم (() => {
this.nav.popToRoot () ،
}). catch (يخطئ => {
تنبيه (err.toString ()) ؛
}) ؛

مرحبا FatehiAlqadasi ، شكرا.
تم طرح خطأ ، هذا هو السجل.

يخطئ:
C @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21236
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21702
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21967
تقليل @ [الرمز الأصلي]
O @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21927
format @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 8: 12952
تحويل @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 8: 14339
Ce @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 3: 23348
أي @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:1046
Te @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 518
no @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:5140
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 42: 25653
updateRenderer @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 4409
Se @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 328
نحن @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 3041
Ge @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:2439
Se @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:336
DiscoverChanges @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 6:5799
_viewAttachToDOM @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 22059
_transition @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 23173
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 19213
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9288
onInvoke @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 5:1143
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9231
تشغيل @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 4458
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 14079
invokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9972
onInvokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 5:1047
invokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9900
runTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 5153
o @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 2210
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 10986
يخطئ:
C @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21236
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21702
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21967
تقليل @ [الرمز الأصلي]
O @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 7: 21927
format @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 8: 12952
تحويل @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 8: 14339
Ce @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 3: 23348
أي @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:1046
Te @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 518
no @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:5140
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 42: 25653
updateRenderer @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 4409
Se @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 328
نحن @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4: 3041
Ge @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:2439
Se @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 4:336
DiscoverChanges @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 6:5799
_viewAttachToDOM @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 22059
_transition @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 23173
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 17: 19213
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9288
onInvoke @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 5:1143
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9231
تشغيل @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 4458
ملف: ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 14079
invokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9972
onInvokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 5:1047
invokeTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 9900
runTask @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 5153
o @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 2210
استدعاء @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js: 3: 10986
dispatchEvent @ [الرمز الأصلي]
handleTapPolyfill @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 18: 6423
pointerEnd @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 18:5144
[الكود المحلي]
handleTouchEnd @ file : ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js: 19: 19943
[الكود المحلي]

@ tonyawad88
هذا أصلح المشكلة

logout(){
this.navCtrl.setRoot("LoginPage");
this.navCtrl.push("LoginPage");

}

خطأ عمره عامين ، لا يزال لا أحد يجرؤ على إصلاحه ... أواجه نفس المشكلة في Ionic 3

اهلا جميعا،

يمكنني الحصول على جميع البيانات الخاصة بي من صفحة الجذر أيضًا التنقل ولكن لا يمكنني التنقل في الصفحة خارج علامات التبويب ، فهي مفتوحة مثل علامات التبويب الفرعية.

جربت كل الاحتمالات لحلها ولكن لم تنجح أي عملية.

صفحة علامة التبويب حيث البيانات الخاصة بي.
1st

بعد النقر على البيانات التي تم جلبها ، سيتم إعادة التوجيه إلى صفحة تفاصيل البيانات ، وقد تم إعادة توجيهها ولكن داخل صفحة علامة التبويب. مثله...

2nd

ساعدني،

شكرا لك مقدما.

لقد لاحظت هذا الخطأ اعتبارًا من [email protected]. يبدو أنه مرتبط بـ DeepLinkConfig ، لأنني إذا قمت بإزالة ذلك من وحدة app.module الخاصة بي ، فيمكنني الاتصال بـ nav.setRoot () طوال اليوم دون مشاكل. فرضيتي هي أنه بعد الاستدعاءات اللاحقة لـ setRoot () ، يدخل منطق الرابط العميق في حالة تتغير فيها حزمة التنقل قبل window.location ، يرى رمز الرابط العميق تلك النافذة. يشير الموقع إلى صفحة غير موجودة في مكدس (لأنك قمت بتعيين Root () بعيدًا عنه) ، وبالتالي فإنه يعيدك إلى الصفحة التي حاولت للتو التنقل بعيدًا عنها.

بغض النظر ، إليك الحل الذي يناسبني.

await this.nav.push(page, params);
this.nav.remove(0, this.nav.length() - 1);

شكرا جزيلا لك @ jknisley ،
لقد حللت مشكلتي مع هذا.

detailEvent(eventItem) {
    this.app.getRootNav().push(DetailEventsPage, { itemUp: eventItem });  
  }

سيعيد هذا الرمز توجيهي إلى صفحة جديدة وتخطيط مختلف (ليس ضمن صفحة علامة التبويب) أيضًا.

مجرد ترك هذا هنا للأجيال القادمة. يبدو أن وظيفة تسجيل الخروج هذه تعمل بالنسبة لي دون أي آثار جانبية. بفضلuiktiomasfeliz.

حزم cli: (/ usr / local / lib / node_modules)

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

الحزم العالمية:

cordova (Cordova CLI) : 7.1.0

الحزم المحلية:

@ionic/app-scripts : 3.1.2
Cordova Platforms  : android 6.3.0 ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

نظام:

ios-deploy : 1.9.2
Node       : v8.9.1
npm        : 5.7.1
OS         : macOS High Sierra
Xcode      : Xcode 9.3 Build version 9E145
async logOut() {
    await this.authProvider.logout();
    await this.app.getRootNav().setRoot('LoginPage');
  }

هذه هي الطريقة التي وجدتها لتعيين مكدس تنقل جديد وإزالة مكدس التنقل القديم. تم القيام بذلك من أجل 3.9.2 الزاوية الأيونية

this.navCtrl.remove(0, this.navCtrl.length() - 1);
this.navCtrl.insert(0, MainPage);
this.navCtrl.pop();

شكرا على القضية! تم قفل هذه المشكلة لمنع التعليقات غير ذات الصلة بالمشكلة الأصلية. إذا استمرت المشكلة في أحدث إصدار من Ionic ، فيرجى إنشاء مشكلة جديدة والتأكد من ملء النموذج بالكامل.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات