包括离子2 /角2的公共标题栏

vis*_*hnu 5 ionic2 angular

我有一个ionic-2标题栏,其中包含所有页面通用的主页或注销按钮和公司徽标.我如何编写一个通用函数(@Injectable()),这样就可以很容易地包含在所有页面中而不是重复代码.

<ion-header>
  <ion-navbar class="hide-border toolbar-btn-color" id="radio">
    <button menuToggle>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title>Send Money</ion-title>
    <ion-buttons end>
      <button (click)="goHome()">
        <ion-icon ios="ios-home" md="md-home"></ion-icon>
      </button>
    </ion-buttons>
  </ion-navbar>
</ion-header>
Run Code Online (Sandbox Code Playgroud)

在每个打字稿文件中,我重复了一个名为gohome()的函数.有没有办法避免这个?

Sha*_*mad 8

您可以通过使用配置生成header-component,然后相应地更改不同组件的配置来实现此目的.创建自定义标头组件.
让我们称之为" 定制头分量 "

自定义标题,component.html

<ion-navbar>
  <button *ngIf="header_data.ismenu" ion-button icon-only menuToggle>
    <ion-icon name="menu"></ion-icon>
  </button>
  <button *ngIf="header_data.ishome" class="algo-header-home-icon" ion-button icon-only (click)="homeClick()">
    <ion-icon class="ion-home" name="home"></ion-icon>
  </button>
  <ion-title class="header-title" [ngClass]="{'ishome-title': header_data.ishome,'ismeun-centre': !header_data.ishome}">
    {{header_data.title}}
  </ion-title>
</ion-navbar>
Run Code Online (Sandbox Code Playgroud)



定制报头component.ts

import { Component,Input } from '@angular/core';
import { NavController } from 'ionic-angular';
import { HomePage } from '../../pages/home/home';

@Component({
  selector: 'custom-header',
  templateUrl: 'custom-header.html'
})
export class CustomHeaderComponent {
  header_data: any;
  constructor(public navCtrl: NavController) {}
  @Input()
  set header(header_data: any) {
    this.header_data=header_data;
  }
  get header() {
    return this.header_data;
  }
  homeClick() {
    this.navCtrl.setRoot(HomePage);
  }
}
Run Code Online (Sandbox Code Playgroud)



这个自定义标头组件采用类型为boolean的配置' ismenu ',类型为boolean的' ishome '和类型为string的' title '.现在让我们在页面组件" home "中使用此组件.我们希望主页组件只有标题和ismenu.我们的代码看起来像这样.

'home.html做为'

<ion-header><custom-header [header]="header_data"></custom-header></ion-header>
 <ion-content padding class="page-home">
   <p>Home Page</p>
 </ion-content>
Run Code Online (Sandbox Code Playgroud)



'home.ts'

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

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  header_data:any;
  constructor(public navCtrl: NavController) {
    this.header_data={ismenu:true,ishome:false,title:"Home"};
  }
}
<br/><br/>
Run Code Online (Sandbox Code Playgroud)

主页标题看起来像这样.

在此输入图像描述


seb*_*ras 1

就像你在这个答案中看到的那样,@mhartington(来自 Ionic 团队)说:

无法创建全局离子导航栏,因为这是故意完成的。为每个组件定义导航栏的目的是,我们可以正确地为标题、导航栏背景颜色(如果您更改它们)设置动画并为所需的其他属性设置动画。

关于创建自定义指令以避免在每个视图中重复代码:

这仍然会对 Angular2 内容投影的工作方式产生错误。当人们尝试这样做时,我们遇到了几个悬而未决的问题,最好的答案就是不这样做。