Я пытаюсь сделать небольшое приложение в Ionic 2, но мне не удается перейти ... Я прочитал документацию, навигационную информацию, navController, некоторое сообщение в StackOverflow ... Я пытался часами, но я застрял! У меня было несколько вопросов.Как перейти в приложение Ionic 2
Мне нужно было найти способ использовать navController
в моем приложении. Я сделал это благодаря @viewChild
и StackOF. Я не совсем понимаю принцип. Я установил rootPage: any = Login;
. Поскольку у меня есть меню в моем приложении, я отключил его на этой странице. На кнопке (click)
я установил корень this.nav.setRoot()
с HomePage
. Теперь из HomePage, в меню, я хочу перемещаться по некоторым страницам. Я застрял здесь. Я использовал метод (click)="openPage(Messagerie)"
. Первая проблема, параметр в openPage() не определен. Затем я попробовал метод [navPush]="pageMessagerie"
и this.pageMessagerie = Messagerie;
, следующий за документацией, но это не сработало, ничего не происходит. Итак, я попытался скопировать код в мою функцию openPage(): this.nav.push(Messagerie);
. Здесь у меня снова есть другая проблема. В первый раз, когда я вызываю push(), страница, кажется, появляется и исчезает немедленно, возвращаясь на HomePage. Второй раз, когда я нажимаю, это работает. Я могу перейти на страницу Messagerie и вернуться на HomePage через кнопку «Назад» на навигационной панели.
Итак ... Вот я, застрял в навигации! Я не знаю, что делать. Вот мой код. Теперь
Update Ok неопределенного порядок. Но мой навигатор все еще действует странно. Когда я использую this.nav.push()
на домашней странице, я получил этот рабочий процесс: Нажмите на Messagerie: откройте Messagerie и сразу же на главной странице. Щелкните по запросу: Откройте Messagerie, немедленно Спросите и оставайтесь там. Нажмите на кнопку возврата назад: Назад в Messagerie, обратно к Demandes и вернуться на главную страницу. Конечно, если я использую this.nav.setRoot()
каждый раз, когда он работает, но я теряю принцип навигации.
App.html
<ion-menu [content]="content">
<ion-toolbar>
<ion-title>Menu</ion-title>
</ion-toolbar>
<ion-content>
<ion-list>
<button ion-item menuToggle = "left">
Mes informations
</button>
<button ion-item menuToggle = "left" (click)="openPage(Messagerie)">
Ma messagerie
</button>
<button ion-item menuToggle = "left" (click)="openPage(Demandes)">
Mes demandes
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav id="nav" #content [root]="rootPage"></ion-nav>
App.ts
import {Component, ViewChild} from '@angular/core';
import {Platform, ionicBootstrap, NavController} from 'ionic-angular';
import {StatusBar} from 'ionic-native';
import {HomePage} from './pages/home/home';
import {Messagerie} from './pages/messagerie/messagerie';
import {Demandes} from './pages/demandes/demandes';
import {Login} from './pages/login/login';
@Component({
templateUrl: 'build/app.html'
})
export class MyApp {
@ViewChild('content') nav
rootPage: any = Login;
constructor(private platform: Platform) {
platform.ready().then(() => {
StatusBar.styleDefault();
});
}
openPage(page) {
console.log(page);
this.nav.push(page);
}
}
ionicBootstrap(MyApp);
Login.ts (с setroot)
import {Component} from '@angular/core';
import {NavController, MenuController} from 'ionic-angular';
import {FormBuilder, ControlGroup, Validators} from '@angular/common';
import {HomePage} from '../home/home';
@Component({
selector: 'mc-login',
templateUrl: 'build/pages/login/login.html'
})
export class Login {
loginForm: ControlGroup;
loginChanged: boolean = false;
motdepasseChanged: boolean = false;
submitAttempt: boolean = false;
constructor(private nav: NavController, private formBuilder: FormBuilder, private menu: MenuController) {
this.menu.enable(false);
this.loginForm = formBuilder.group({
login: ['', Validators.compose([Validators.maxLength(10), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
motdepasse: ['', Validators.compose([Validators.maxLength(10), Validators.pattern('[a-zA-Z ]*'), Validators.required])]
});
}
elementChanged(input) {
let field = input.inputControl.name;
this[field+"Changed"] = true;
}
logintoapp() {
this.submitAttempt = true;
if(this.loginForm.valid) {
this.logindatabase();
} else {
console.log("Nope");
}
}
logindatabase() {
this.nav.setRoot(HomePage);
}
}
Пропустить что-нибудь? Что я делаю не так ? Большое спасибо за вашу помощь!
Спасибо за все эти советы, чтобы очистить мой код @Peter! Но когда я использую 'push' вместо' setRoot', я прихожу на HomePage с навигационной панелью со стрелкой назад, а не с кнопкой меню ... Это уже не моя главная страница. И, как я сказал @tothefux, у меня все еще есть проблемы с рабочим процессом навигации. Пожалуйста, проверьте мой комментарий к его ответу. На самом деле ... Если я использую setRoot на каждой страницеOpen(), он работает, но это не решение, я теряю рабочий процесс. – Xav
Вы правы, после «толчка» вы приземлитесь на страницу, где в навигационной панели будет отображаться кнопка «Назад». Если вы хотите приземлиться на следующую страницу, не имея возможности вернуться, вы можете просто удалить последнюю страницу из истории. Я редактировал свое решение.Это решение, которое я реализовал для решения «Логин/Домашняя страница» в своем приложении, не знаю, является ли оно лучшим, но он выполняет эту работу. –
Ваше обновление хорошо работает благодаря @Peter, за исключением того, что я не могу объявить '@ViewChild (Nav) nav: Nav;': _Cannont find 'Nav'_. И что '@ViewChild ('Nav') nav: 'Nav';': _Error TS2339: свойство 'setRoot' не существует в типе '' Nav '' _. Поэтому я остаюсь с '@ViewChild ('content') nav;' На самом деле я хочу использовать метод push(), не обязательно с домашней страницы, в Messagerie (Inbox), но из Inbox для самого сообщения, например. И это не сработает. У меня странный рабочий процесс: Нажмите Messagerie = Messagerie, авто обратно на HomePage. Щелкните Demandes = Demandes. Нажмите кнопку Back = Messagerie, затем HomePage. – Xav