首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IONIC2 2/Angular2 2 ngOnChange不工作

IONIC2 2/Angular2 2 ngOnChange不工作
EN

Stack Overflow用户
提问于 2017-11-15 20:06:10
回答 2查看 623关注 0票数 0

我是Angular2的新手,我已经为这个问题挣扎了一段时间,在网上找不到解决办法。

on ionic2!

我希望使用ngOnChanges(),以便检测到对zonaid的更改

estados.html:

代码语言:javascript
复制
<ion-item>
       <ion-label color="branco">Zonas</ion-label>


              <ion-select *ngIf="isTrue2" [(ngModel)]=zonaid>
                 <ion-option value={{bicho.zonas}} *ngFor="let bicho of idespecie">
                    {{bicho.zonas}}
                 </ion-option>
             </ion-select>


              <ion-select *ngIf="!isTrue2" [(ngModel)]="zonaid">
                 <ion-option value={{item.id}} *ngFor="let item of itemsZon" >
                    {{item.codigo}}
                 </ion-option>

              </ion-select>
     </ion-item>

idespecieitemsZon是.json文件的一部分。

estados.ts

代码语言:javascript
复制
import { Component, Input, SimpleChanges, OnChanges } from '@angular/core';
import { NavController } from 'ionic-angular';
import { IpmaBivService} from '../../app/services/ipmabiv.service'
import { Http } from '@angular/http';

@Component({
  selector: 'page-estados',
  templateUrl: 'estados.html'
})
export class EstadosPage {
   itemsZon: any;
   itemsEsp: any;
   zonaEscolhida: any;

   @Input()
   zonaid: string;


   idzona: '';
   idespecie: any[];

   isTrue1:boolean = false;
   isTrue2:boolean = false;
   constructor(public navCtrl: NavController, private ipmaBivService:IpmaBivService) {
  }
  ngOnChanges(changes: SimpleChanges){
     console.log('ngOnChanges ran');
     if(this.zonaid != ''){
        this.isTrue1 = true;
        this.getJsonZonas(this.zonaid);
     }
     if(this.especie != ''){
        this.isTrue2 = true;
        this.getJsonEspecies(this.especie);
     }
 }

}
  ngOnInit(){
     this.getDataZonas('zonas')
     this.getDataEspecies('especies')
   //   this.getData('especies')
 }
 }

app.module.ts

代码语言:javascript
复制
    import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { HttpModule, JsonpModule } from '@angular/http';

import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { ListPage } from '../pages/list/list';
import { EstadosPage } from '../pages/estados/estados';
import { OutrosPage } from '../pages/estados/outros';

import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

@NgModule({
  declarations: [
    MyApp,
    HomePage,
    ListPage,
    EstadosPage,
    OutrosPage
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp),
    HttpModule,
    JsonpModule
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage,
    ListPage,
    OutrosPage,
    EstadosPage

  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler}
  ]
})
export class AppModule {}

所有事情都发生在同一个组件中(离子页)。

我的目标只是能够在zonaid更改时运行一个方法。如果你认为有比通过ngOnChanges更好的方法,请告诉我

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-15 20:14:46

首先,记住总是添加qoutes,将[(ngModel)]=zonaid更改为[(ngModel)]="zonaid"

无论如何,作为一个答案,尝试如下:

改变<ion-select *ngIf="isTrue2" [(ngModel)]=zonaid>

<ion-select *ngIf="isTrue2" [ngModel]="zonaid" (ngModelChange)="runYourFunction($event)">

记住在代码中创建一个公共runYourFunction(event) {}

这样,您就可以将数据从组件绑定到视图,并且每当视图发生变化时,您将运行函数runYourFunction

希望这有帮助

票数 1
EN

Stack Overflow用户

发布于 2017-11-16 06:05:35

不需要ngOnChanges。角将自动更新选定的值与绑定。暗神经元的答案将有效,但代码需要从[ngModel]="zonaid"改为[(ngModel)]="zonaid"。你也可以找到我的离子滴入的工作版本

您的HTML应该如下所示。

代码语言:javascript
复制
<ion-item>
       <ion-label color="branco">Zonas</ion-label>
              <ion-select *ngIf="isTrue2" [(ngModel)]="zonaid" (ngModelChange)="zonaiChanged()">
                 <ion-option value={{bicho.zonas}} *ngFor="let bicho of idespecie">
                    {{bicho.zonas}}
                 </ion-option>
             </ion-select>


              <ion-select *ngIf="!isTrue2" [(ngModel)]="zonaid" (ngModelChange)="zonaiChanged()">
                 <ion-option value={{item.id}} *ngFor="let item of itemsZon" >
                    {{item.codigo}}
                 </ion-option>

              </ion-select>
     </ion-item>

在TS文件中,调用zonaiChanged对下拉更改进行一些操作

代码语言:javascript
复制
zonaiChanged(){
alert(this.zonaid);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47316327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档