IONIC2/Angular2 ngOnChange 不起作用
IONIC2/Angular2 ngOnChange doesn't work
我是 Angular2 的新手,我已经为这个问题苦苦挣扎了一段时间,但在网上找不到解决办法。
[在 ionic2 上!]
我想使用 ngOnChanges() 这样我就可以检测到 zonaid:
的变化
estados.html:
<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>
idespecie 和 itemsZon 是 .json 文件的一部分
estados.ts
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
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 进入更好的方法,请告诉我
谢谢!
首先,记得随时添加引号,将[(ngModel)]=zonaid
改为[(ngModel)]="zonaid"
无论如何,试试这个答案:
改变<ion-select *ngIf="isTrue2" [(ngModel)]=zonaid>
到
<ion-select *ngIf="isTrue2" [ngModel]="zonaid"
(ngModelChange)="runYourFunction($event)">
记得在代码中创建 public runYourFunction(event) {}
。
有了这个,您将数据从组件绑定到视图,每当视图发生变化时,您将 运行 函数 runYourFunction
。
希望对您有所帮助
尝试export class EstadosPage implements OnChanges {
ngOnChanges 不是必需的。 Angular 将自动更新绑定的选定值。 Dark Neuron 答案会起作用,但代码需要从 [ngModel]="zonaid"
更改为 [(ngModel)]="zonaid"
。你也可以找到我的 working version of ionic dropdown here
你的 HTML 应该是这样的。
<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 以在下拉列表更改时执行某些操作
zonaiChanged(){
alert(this.zonaid);
}
我是 Angular2 的新手,我已经为这个问题苦苦挣扎了一段时间,但在网上找不到解决办法。
[在 ionic2 上!]
我想使用 ngOnChanges() 这样我就可以检测到 zonaid:
的变化estados.html:
<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>
idespecie 和 itemsZon 是 .json 文件的一部分
estados.ts
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
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 进入更好的方法,请告诉我
谢谢!
首先,记得随时添加引号,将[(ngModel)]=zonaid
改为[(ngModel)]="zonaid"
无论如何,试试这个答案:
改变<ion-select *ngIf="isTrue2" [(ngModel)]=zonaid>
到
<ion-select *ngIf="isTrue2" [ngModel]="zonaid"
(ngModelChange)="runYourFunction($event)">
记得在代码中创建 public runYourFunction(event) {}
。
有了这个,您将数据从组件绑定到视图,每当视图发生变化时,您将 运行 函数 runYourFunction
。
希望对您有所帮助
尝试export class EstadosPage implements OnChanges {
ngOnChanges 不是必需的。 Angular 将自动更新绑定的选定值。 Dark Neuron 答案会起作用,但代码需要从 [ngModel]="zonaid"
更改为 [(ngModel)]="zonaid"
。你也可以找到我的 working version of ionic dropdown here
你的 HTML 应该是这样的。
<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 以在下拉列表更改时执行某些操作
zonaiChanged(){
alert(this.zonaid);
}