【问题标题】:Its possible to make action after ngIf?在ngIf之后可以采取行动吗?
【发布时间】:2017-06-28 15:47:33
【问题描述】:

我有一个嵌套在两个 ngFor 中的 ngIf,用于制作离子列表,但我不想要重复的离子列表,有没有办法使如果 ngIf 正确,那么它会更改变量值,例如 Show=false ,所以它不会继续制作离子列表?谢谢

这里是代码,带 *** 的代码是我想要的代码,当它触发时,它会将所需的第二个值 hall.show 更改为 True,因此不会重复

<ion-content padding>
  <template ngFor let-item [ngForOf]="listaRdy">
      <template ngFor let-hall [ngForOf]="pasillosObj">
        ***<ion-list *ngIf="item.pasillo==hall.value && hall.show ==false">
          <ion-list-header>{{hall.name}}</ion-list-header>
          <template ngFor let-articulo [ngForOf]="listaRdy">
            <ion-item *ngIf="articulo.pasillo==hall.value">{{articulo.name}}</ion-item>
          </template>
        </ion-list>
      </template>
  </template>
</ion-content>

【问题讨论】:

  • 请添加一些代码,显示您已经尝试过什么、它给了您什么以及您想要得到什么。
  • @Duncan 我刚刚做了,对不起,如果我想清楚的话

标签: angular ionic-framework ionic2 angular-ng-if


【解决方案1】:

从你的模板中调用一个函数怎么样?我会试试这个:

***<ion-list *ngIf="item.pasillo==hall.value && hall.show ==false">
{{setToTrue(hall.show)}}
...

然后在您的.ts 文件中:

 setToTrue(variable){
       variable = true;
    }

【讨论】:

  • 这正是我一直在寻找的,我希望它有效!提前致谢
  • 不起作用,我只是注意到这个解决方案不会改变对象数组中的属性值,有什么线索吗?
【解决方案2】:

重要的是要意识到,使用 Angular,您的模板不仅会渲染一次,它还会在任何表达式发生变化时重新渲染。

这意味着如果您更改 hall.show 作为渲染模板的副作用,Angular 将立即一次又一次地渲染它,直到它停止更改或直到 Angular 放弃并且您在控制台中记录一个错误.

这意味着您无法实现您想要实现的目标,您无法在使用 ngFor 迭代元素时更新元素的状态并期望得到可预测的结果。

相反,您需要做的是遍历 Typescript 代码中的数据结构并预先计算您需要的所有值,以便您可以干净地呈现模板。您可能需要更改构建数据的方式:例如,不要存储布尔标志来指示您是否已经在哪里使用了特定的 hall 值,而是存储对您要使用的值的引用。或者,更好的是,将单个 pasillosObj 列表拆分为附加到 item 元素的单独列表,这样您就根本不需要 ngIf

<ion-content padding>
  <template ngFor let-item [ngForOf]="listaRdy">
      <template ngFor let-hall [ngForOf]="item.pasillosObj">
       <ion-list>
          <ion-list-header>{{hall.name}}</ion-list-header>
          <template ngFor let-articulo [ngForOf]="listaRdy">
            <ion-item *ngIf="articulo.pasillo==hall.value">{{articulo.name}}</ion-item>
          </template>
        </ion-list>
      </template>
  </template>
</ion-content>

【讨论】:

    【解决方案3】:

    您可以在 ng-if 语句中使用 javascript 函数,例如:

    $scope.myNgIf=function(params){//Show=false or whatever; //return true of false;}
    

    然后在你的 HTML &lt;div ... ng-if="myNgIf()"&gt;my content&lt;/div&gt;

    【讨论】:

    • 你能告诉我如何在我刚刚上传的代码中执行那个吗,很抱歉从一开始就没有代码
    • 对不起,我没有意识到你在使用 Angular 2。在你的 Angular 类文件中定义你想要的函数,比如 myNgIf(): boolean {//your code; //return true/false;} 并在您的 html 代码中
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多