【问题标题】:Ionic 2-3 *ngIf doesn't update the viewIonic 2-3 *ngIf 不更新视图
【发布时间】:2018-03-21 21:50:45
【问题描述】:

我正在开发第 3 版的 Ionic 应用程序。

我有一个在 app.html 中定义的侧边菜单(切换菜单)

<ion-menu [content]="content" (ionClose)="menuClosed()(ionOpen)="menuOpened()">
<ion-header>
  <ion-toolbar>
    <ion-title>Menu</ion-title>
  </ion-toolbar>
</ion-header>
<ion-content>
    <button menuClose ion-item (click)="toggleHelp()">
        <ion-icon item-start name="help-circle"></ion-icon>
        <ion-label>Help</ion-label>
    </button>
</ion-content>

在app.component.ts文件中,有这个函数:

private toggleHelp = () =>{
  this.helpClicked = true;
  this.homePage.showHelp();
}

在我的主页上,我有一张说明内容的卡片。用户可以隐藏它,如果用户打开侧边菜单,他可以点击帮助按钮(在侧边菜单上声明),它会再次显示卡片。

home.html 看起来像:

<ion-header>
  <ion-navbar>
    <button ion-button menuToggle start>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>
<ion-content no-padding>
  <ion-refresher (ionRefresh)="doRefresh()"></ion-refresher>
  <ion-card margin *ngIf="(help_shown == true)" class="card-help">
<span class="button_acknowledgement">
  <button ion-button clear color="bluelight" (click)="hideHelp()">I GOT IT</button>
</span>
    </ion-card>
</ion-content>

在 home.ts 中:

export class HomePage {

  help_shown = true;

  constructor(private platform: Platform, private zone: NgZone) {
  }
    private hideHelp = () =>{
      this.help_shown = false;
      console.log("help_shown: "+this.help_shown)
    }
public showHelp = () =>{
    this.zone.run(() => {
      this.help_shown = true;
      console.log("help_shown: "+this.help_shown)
    });        
}

所以现在,当我点击我得到它的按钮时,卡片将被隐藏(因为变量 help_shown 将被更改为 false)。当我点击菜单栏内的帮助时,变量 help_shown 将被函数修改(它将传递为 true,我记录了它,所以我确定它正在工作),但是即使 *ngIf 应该也不会出现卡片做它出现。我尝试使用 ngZone,但没有成功。有人可以帮帮我吗?

PS : 如果我在主页中创建一个按钮,这将改变变量 help_shown,它也会起作用。

你可以试试我这里说的:https://ionic-n35gsm.stackblitz.io

【问题讨论】:

  • 只是一个快速提示:这不是一个“angularjs”问题,而是一个“angular”问题
  • 好的,很抱歉。谢谢
  • 你可以试试我这里说的:ionic-n35gsm.stackblitz.io

标签: angular ionic2 ionic3


【解决方案1】:

改变

来自

<ion-card margin *ngIf="(help_shown == true)" class="card-help">

<ion-card margin *ngIf="help_shown" class="card-help">

【讨论】:

  • 它的行为相同:(
【解决方案2】:

我最好的猜测是您遇到了一些范围问题,因为您将函数定义为变量。尝试按如下方式更改它们:

hideHelp() {
  this.help_shown = false;
}

showHelp() {
  this.help_shown = true;
}

正如@Sajeetharan 已经提到的,您不需要将布尔变量与truefalse 显式比较。

【讨论】:

  • 我认为你在范围内是对的。当引用不在首页,而是移动到app.component.ts时,范围会有所不同。我相信使用一个组件,然后输出需要事件来触发更新。
  • @StevenScott 感谢您的输入,help_shown 仍然是一个实例变量,因此他可以使用 this 访问它,无需调用函数。
  • 对不起,你是对的,我将删除该评论,因为我正在考虑其他内容(按钮功能)而不是问题中的内容。
  • 您好,您的解决方案没有任何改变。我认为这是一个独家问题,但我不知道如何解决它
  • 我去看看,让你知道!
【解决方案3】:

试试setTimeout(),然后告诉我。

.html

 <ion-card margin *ngIf="help_shown" class="card-help">

.ts

   help_shown:boolean = true;

   constructor(private platform: Platform) {
     }

    showHelp(){
       setTimeout(() => {
          this.help_shown = true;
       },500);        
    }

【讨论】:

【解决方案4】:

好的,我通过在按下按钮时在菜单中声明一个事件解决了我的问题。并且在 HomePage 的构造函数上有一个事件监听器。

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2018-10-11
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多