美文网首页ionic开发ionic3.0亮宝前端学习室
ionic3 教程(三)设置页制作

ionic3 教程(三)设置页制作

作者: Snorlax丶 | 来源:发表于2017-06-25 22:26 被阅读12191次

链接:
ionic3 教程(一)安装和配置
ionic3 教程(二)登录页制作
ionic3 教程(三)设置页制作
ionic3 教程(四)安卓硬件返回键处理
ionic3 教程(五)基本的网络请求

现在大部分 App,都会有自己的设置页(个人信息页),里面会包含个人资料、设置、退出登录等功能。这一回我们就在制作一个个人信息页。

1.删除 ContactPage 和 AboutPage

首先删除文件,然后删除 app.module.ts 中的引用,最后删除 Tabs.ts 中的引用。如果删除后运行不了就再检查一下或者重新运行一下,你做项目的时候迟早会遇到需要删文件的情况。

2.添加设置页面

  • 添加设置页

    ionic g page Setting

  • 在app.module.ts中import,并分别写到declarations和entryComponents中。

  • 在 tabs.ts 中引入,并在 tabRoots 中插入这段代码

    {
      root: SettingPage,
      tabTitle: '设置',
      tabIcon: 'person'
    }
    

Title 是标题,这里的 tabIcon 用的是 ionic 提供的默认图标,图标大全请看
https://ionicframework.com/docs/ionicons/ (最新)
http://ionicons.com/ (已过时)

icon.png

使用时直接输入左边的 Name 值即可。

3.制作设置页内容

打开 setting.html,输入以下代码

    <ion-header>
        <ion-navbar>
            <ion-title>
                更多
            </ion-title>
        </ion-navbar>
    </ion-header>

    <ion-content class="bg-color">
        <ion-list class="top-list">
            <button ion-item [navPush]="userInfoPage">
                <ion-avatar item-left>
                    [图片上传失败...(image-c93b50-1513351069560)]
                </ion-avatar>
                <h2>devilx</h2>
                <p>账号:18600001111</p>
            </button>
        </ion-list>

        <ion-list>
            <ion-item>
                控件1
            </ion-item>
            <button ion-item>
                控件2
            </button>
            <button ion-item>
                <ion-avatar item-left>
                    [图片上传失败...(image-55ea8-1513351069560)]
                </ion-avatar>
                控件3
            </button>
        </ion-list>

        <ion-list>
            <button ion-item>
                版本号
                <span  item-end>V1.0</span>
            </button>
            <button ion-item>
                关于
            </button>
        </ion-list>

        <div style="text-align: center; margin-left: 30px; margin-right: 30px;margin-top: 30px;">
            <button ion-button block (click)="logOut()">
                退出登录
            </button>
        </div>
    </ion-content>

打开setting.scss,输入以下代码

page-setting {
  .toolbar-title-md{
    text-align: center;
  }

  .scroll-content{
    overflow: hidden;
  }

  .bg-color{
    background-color: #efeeee;
  }

  .top-list{
    margin-top: 15px;
  }
}

运行效果如图所示(我这里使用了 http://localhost:8100/ionic-lab,所以展示的是 iOS 的效果):

设置页.png

这一段我多展示了几种效果,代码自行理解加深以下印象。

4.制作退出登录功能

首先我们需要回到 login.ts,把跳转方式改一下,因为如果使用 push 的方法进行跳转,即使你隐藏了返回按钮,安卓手机也是可以使用返回键跳回上一个页面的。所以我们要使用另一种跳转方式

进入 login.ts,引入 ModalController,删除无用的引用,如下

import { Component } from '@angular/core';
import { IonicPage, ModalController} from 'ionic-angular';
import { TabsPage } from "../tabs/tabs";

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

  constructor(public modalCtrl: ModalController) {
  }

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

  logIn(username: HTMLInputElement, password: HTMLInputElement) {
    if (username.value.length == 0) {
      alert("请输入账号");
    } else if (password.value.length == 0) {
      alert("请输入密码");
    } else {
      let userinfo: string = '用户名:' + username.value + '密码:' + password.value;
      alert(userinfo);
      let modal = this.modalCtrl.create(TabsPage);
      modal.present();
    }
  }

}

然后到 Setting.ts 页面,改为以下代码

import { Component } from '@angular/core';
import { IonicPage, ModalController } from 'ionic-angular';
import { LoginPage } from "../login/login";

@IonicPage()
@Component({
  selector: 'page-setting',
  templateUrl: 'setting.html',
})
export class SettingPage {

  constructor(public modalCtrl: ModalController) {
  }


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

  logOut() {
    let modal = this.modalCtrl.create(LoginPage);
    modal.present();
  }

}

OK,退出登录功能制作完成,这一节到此结束。

Demo下载地址

追加

最近有朋友提问说,跳转到 tabs 页再回登录页会无限进入。这里提供一个解决方案。push 后再删除之前页面即可。

this.navCtrl.push(TabsPage).then(() => {
  const startIndex = this.navCtrl.getActive().index - 1;
  this.navCtrl.remove(startIndex, 1);
});

相关文章

网友评论

  • sherry1984:正好学到了 ts创建tab 谢谢
  • andy桐:你这种写法会导致一直在present页面,点登录按钮present一个tabPage,点退出又一个新的loginPage页面present出来了。。。这样儿写不太合理吧。。。(我是个ionic初学者,若说的不对请指教)
    Snorlax丶:对,现在不这么写了,可以用 push 然后删除掉之前的页面。

    this.navCtrl.push(TabsPage).then(() => {
    const startIndex = this.navCtrl.getActive().index - 1;
    this.navCtrl.remove(startIndex, 1);
    });
  • Miracles_2d5e: 谢谢博主分享这么好的东西,初学Ionic,希望继续更新,说说怎么注册:kissing_heart:
  • 灭白:devlx 你好!

    在你这里学到了很多,非常感谢!

    但是我遇到了一个问题,按照你的代码,网页可以正常流程显示没有任何问题,但是当我构建IOS和Android的时候出现了错误

    ionic cordova build ios

    TypeError: Cannot read property 'findall' of null

    我找遍了也没找到findall 这个属性

    没有添加删除页面之前 构建ios是没有任何问题的。
    Snorlax丶:现查的一个,试试看

    https://stackoverflow.com/questions/45783665/ionic-cannot-read-property-findall-of-null
  • 421ad736768c:看完了。。。。。。。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,求作者继续更新啊,学到不少好东西。问个问题,我登录的用户名和密码如何拿到后台进行校验呢
    灭白:devlx 你好!在你这里学到了很多,非常感谢!但是我遇到了一个问题,按照你的代码,网页可以正常流程显示没有任何问题,但是当我构建IOS和Android的时候出现了错误

    ionic cordova build ios

    TypeError: Cannot read property 'findall' of null

    我找遍了也没找到findall 这个属性

    没有添加删除页面之前 构建ios是没有任何问题的。
    Snorlax丶:@Gabriel_wei 后台校验的话正常传参数发网络请求就好。近期上班活多,能更尽量更哈
  • tiandashu:大神可以说下ionic中的视图的切换么?现在只知道push和pop,ModalController是做什么的?
    tiandashu:@devilx 真的好细致的回答感谢!!!嗯嗯这里理解的差不多了,请问一下我可以改变rootpage么,比如最开始是rootPage=welcomePage,欢迎页完了以后之后设置rootPage=tabsPage可以么?还有一个我用navCtrl.push()的同时使用viewCtrl.dismiss()那么它还存在页面堆栈中么?
    tiandashu:@devilx 恩恩非常感谢说的很清晰也很细致,我看着你的demo做了一遍感觉对我的帮助很大,祝你写的文章越来越好:smile:
    Snorlax丶:push 和 pop对应,是一个栈,栈的特点是 后进先出。每次要跳转进一个页面的时候,往栈里push一个页面,离开的时候pop出来最后一个。也可以直接 popRoot 释放掉所有的页面回到根页面。为什么我们 push 到别的页面再回来的时候,内容都还在,因为他们一直放在栈里没有被释放。

    present 与 dismiss 对应,ModalController 就是弹出了一个页面,自己创建自己关闭。

    用法的话,如果你是做一层层列表什么的跳转的话就用 push。如果是弹出一个页面填写表单,写完就关闭的,可以用 present。
  • b176fde55567:请问我按照您的ModalController方法构建了之后,为什么登录之后变成以LoginPage为变暗背景的一个小的Tabs界面呢?点击变暗背景之后就返回了。我用的是Ionic Serve在Chrome上看的
    Snorlax丶:在浏览器和手机上的显示效果是不同的,这个实现的机制就是弹出一个窗口。你把浏览器窗口拖小一些也不会出现这个情况。如果实在不想看到就改用 push 吧
  • FireStyle:html里的![](./assets/icon/user.jpg)显示不出来,我用的img标签,你这个是什么表达式写法
    Snorlax丶:@FireStyle 拿button举例吧,看看这个网址http://ionicframework.com/docs/api/components/button/Button/
    FireStyle:@devilx 还想请教一下哪里能查各个组件所涉及的样式类
    Snorlax丶::cold_sweat: Markdown把我的代码自动转成这样了,应该是<img src="./assets/icon/user.jpg">

本文标题:ionic3 教程(三)设置页制作

本文链接:https://www.haomeiwen.com/subject/diircxtx.html