【问题标题】:Ionic 4 change ion-tab-button with custom iconIonic 4 更改带有自定义图标的 ion-tab-button
【发布时间】:2019-10-14 14:18:54
【问题描述】:

在单击ion-tab-button 后,我正在尝试使用自定义 src 更改 ion-icon

我尝试过,使用 (click) 事件触发函数并更改 ion-icon 内的 [src]="..."

有什么合适的方法可以改变这种骇人听闻的风格吗?

HTML:

 <ion-tabs>
  <ion-tab-bar slot="bottom">
    <ion-tab-button tab="news/home" (click)="changeNewsIcon()">
      <ion-icon [src]="newsIcon"></ion-icon>
      <ion-label class="tab-title">News</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="user" (click)="changeSearchIcon()">
      <ion-icon [src]="searchIcon"></ion-icon>
      <ion-label class="tab-title">Search</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="networking" (click)="changeNetworkIcon()">
      <ion-icon [src]="notiIcon"></ion-icon>
      <ion-label class="tab-title">Networking</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="chat" (click)="changeChatIcon()">
      <ion-icon [src]="chatIcon"></ion-icon>
      <ion-label class="tab-title">Chat</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="profile" (click)="changeProfIcon()">
      <ion-icon [src]="profIcon"></ion-icon>
      <ion-label class="tab-title">Profile</ion-label>
    </ion-tab-button>
  </ion-tab-bar>
</ion-tabs>

TS:

newsIcon = './assets/tabs/home.svg';
searchIcon = './assets/tabs/search.svg';
notiIcon = './assets/tabs/group.svg';
chatIcon = './assets/tabs/chat.svg';
profIcon = './assets/tabs/user.svg';

changeNewsIcon(): void {    
  // change news icon
  this.newsIcon = './assets/tabs/clicked-home.svg';

  // reset others icon
  this.searchIcon = './assets/tabs/search.svg';
  this.notiIcon = './assets/tabs/group.svg';
  this.chatIcon = './assets/tabs/chat.svg';
  this.profIcon = './assets/tabs/user.svg';
}

changeSearchIcon(): void {
  // change user icon
  this.searchIcon = './assets/tabs/clicked-search.svg';

  // reset others icon
  this.newsIcon = './assets/tabs/home.svg';
  this.notiIcon = './assets/tabs/group.svg';
  this.chatIcon = './assets/tabs/chat.svg';
  this.profIcon = './assets/tabs/user.svg';
}

...

如果有人愿意提供帮助,不胜感激

【问题讨论】:

    标签: javascript angular ionic-framework ionic4


    【解决方案1】:

    我不确定我的方法是否更好,但这可能是做同样事情的另一种方法。

    HTML:

    <ion-tabs>
        <ion-tab-bar slot="bottom">
          <ion-tab-button tab="news/home" (click)="changeNewsIcon()">
            <ion-icon [src]="isNewsSelected ? newsIcon : clickedNewsIcon"></ion-icon>
            <ion-label class="tab-title">News</ion-label>
          </ion-tab-button>
          <ion-tab-button tab="user" (click)="changeSearchIcon()">
            <ion-icon [src]="isSearchSelected ? searchIcon clickedSearchIcon"></ion-icon>
            <ion-label class="tab-title">Search</ion-label>
          </ion-tab-button>
        </ion-tab-bar>
    </ion-tabs>
    

    TypeScript 组件:

    export class SomeComponent {
    
      newsIcon = './assets/tabs/home.svg';
      clickedNewsIcon = './assets/tabs/clicked-home.svg';
      searchIcon = './assets/tabs/search.svg';
      clickedSsearchIcon = './assets/tabs/clicked-search.svg';
    
      isNewsSelected = false;
      isSearchSelected= false;
    
      changeNewsIcon(): void {    
        resetAll();
        this.isNewsSelected = true;
      }
    
      changeSearchIcon(): void {
       resetAll();
       this.isSearchSelected = true;
      }
    
      resetAll(){
        this.isNewsSelected = false;
        this.isSearchSelected= false;
      }
    }
    

    【讨论】:

    • 好方法 :) 除了这种方法,我还尝试编辑 ion-icon 的颜色 css,但它仅适用于 ionic 图标,但不适用于自定义图标
    • 这是一种解决方法。当您从一个选项卡及其子视图移动并转到另一个选项卡时,此时所选图像不同且所选选项卡不同时,它不起作用。
    【解决方案2】:

    之前,我尝试使用离子图标将 css 颜色放入 ion-tab-buttonion-icon。颜色按预期变化,但没有自定义图标。

    <ion-tab-button tab="news/home" style="color: blue">
      <ion-icon name="home"></ion-icon>
      <ion-label class="tab-title">News</ion-label>
    </ion-tab-button>
    

    一天后,我尝试检查如果我们喜欢这种方法,为什么自定义图标不会改变颜色。然后我尝试检查 Adob​​e Illustrator CC 中的 Ionic SVG 图标层。就是这样。

    如您所见,第 1 层内有 &lt;path&gt;(离子图标)

    问题出在我的 SVG 文件上。要使用 css 属性,我只需要编辑图层即可。

    这是编辑图层后的结果,按预期工作:)

    解决方案:你只需要添加颜色 css 并获得正确的图层 SVG 图标

    此外,我将更新如何在选项卡处于活动状态时使用自定义图标。

    更新 2:

    这是有效的 html 代码:

    <ion-tabs>
      <ion-tab-bar class="tab-bar" slot="bottom">
        <ion-tab-button tab="news/home">
          <ion-icon class="icon-news" src="./assets/tabs/md-custom-home.svg"></ion-icon>
          <ion-label class="tab-title">News</ion-label>
        </ion-tab-button>
        <ion-tab-button tab="search">
          <ion-icon class="icon-search" src="./assets/tabs/md-custom-search.svg"></ion-icon>
          <ion-label class="tab-title">Search</ion-label>
        </ion-tab-button>
        <ion-tab-button tab="networking">
          <ion-icon class="icon-networking" src="./assets/tabs/md-custom-networking.svg"></ion-icon>
          <ion-label class="tab-title">Networking</ion-label>
        </ion-tab-button>
      </ion-tab-bar>
    </ion-tabs>
    

    SCSS:

    ion-tab-button {
      --color: #000000;
      --color-selected: #00cee5;
    }
    

    只要确保使用正确的 SVG ;)

    【讨论】:

    • 对我来说必须进行彩色工作的方法是在记事本中编辑 svg 文件并确保没有设置“填充”属性。无需在 AI 中进行编辑。
    【解决方案3】:

    html 中的第一个:

    <ion-tabs>
      <ion-tab-bar slot="bottom">
        <ion-tab-button tab="home" (click)="changeIcon('home')">
          <ion-icon [hidden]="!activeHomepage" name="md-homepage"></ion-icon>
          <ion-icon [hidden]="activeHomepage" name="md-homepage-inactive"></ion-icon>
          <ion-label></ion-label>
        </ion-tab-button>
    
        <ion-tab-button tab="info" (click)="changeIcon('info')">
          <ion-icon [hidden]="!activeInfo" name="md-info"></ion-icon>
          <ion-icon [hidden]="activeInfo" name="md-info-inactive"></ion-icon>
          <ion-label></ion-label>
        </ion-tab-button>
    
        <ion-tab-button tab="inbox" (click)="changeIcon('inbox')">
          <ion-icon [hidden]="!activeNotification" name="md-notification"></ion-icon>
          <ion-icon [hidden]="activeNotification" name="md-notification-inactive"></ion-icon>
          <ion-label></ion-label>
        </ion-tab-button>
    
    
        <ion-tab-button tab="profile" (click)="changeIcon('profile')">
          <ion-icon [hidden]="!activeProfile" name="md-profile"></ion-icon>
          <ion-icon [hidden]="activeProfile" name="md-profile-inactive"></ion-icon>
          <ion-label></ion-label>
        </ion-tab-button>
      </ion-tab-bar>
    </ion-tabs>
    

    类型脚本

    activeHomepage = false;
      activeInfo = false;
      activeNotification = false;
      activeProfile = false;
    
      constructor() {
        this.activeHomepage = true;
      }
    

    添加此功能:

     changeIcon(page) {
        if (page == 'home') {
          this.activeHomepage = true;
          this.activeProfile = false;
          this.activeNotification = false;
          this.activeInfo = false;
        } else if (page == 'info') {
          this.activeHomepage = false;
          this.activeProfile = false;
          this.activeNotification = false;
          this.activeInfo = true;
    
        } else if (page == 'inbox') {
          this.activeHomepage = false;
          this.activeProfile = false;
          this.activeNotification = true;
          this.activeInfo = false;
        }
        else {
          this.activeHomepage = false;
          this.activeProfile = true;
          this.activeNotification = false;
          this.activeInfo = false;
        }
    
      }
    

    result 这很简单,工作正常。谢谢你:)

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 2019-11-22
      • 2019-05-15
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多