Я знаю, что этот вопрос немного стар, но я не видел ответа, который дает простое решение проблемы, поэтому я решил, что поделюсь своим «простым» решением.
$.getJSON("example.json", function() {
console.log( "success" );
}).fail(function() {
console.log( "error" );
});
Мы можем просто использовать обратный вызов .fail()
, чтобы проверить, произошла ли ошибка.
Надеюсь, это поможет:)
Я использую ионный 3 с Lazyload угловой 4 и не имеет проблем. Чтобы сделать его одноразовым, убедитесь, что ваш модуль приложения предоставляет эту услугу. и удалите провайдеров @Component, которые используют сервис.
App Module
@NgModule({
...
providers: [
StatusBar,
SplashScreen,
{ provide: ErrorHandler, useClass: IonicErrorHandler },
Singleton // the service or provider to be single ton
]
})
export class AppModule { }
Служба
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
@Injectable()
export class Singleton {
data = "init data";
constructor() {
console.log('Hello Singleton Provider');
}
set(data){
this.data = data;
}
log(){
console.log(this.data);
}
}
Tes Case служба на ионной странице
Первая страница
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-first',
templateUrl: 'first.html'
})
export class FirstPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad First');
this.single.log(); // log init data;
this.single.set("First singleton data");
}
}
Вторая страница
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-second',
templateUrl: 'second.html'
})
export class SecondPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad Second');
this.single.log(); // log First singleton data
}
}
Третья страница создать новый экземпляр, если провайдеры добавлены в компонент
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-second',
templateUrl: 'second.html',
providers:[Singleton] // wrong because its create a new instance
})
export class ThirdPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ThirdPage');
this.single.log(); // log init data
}
}
, убедитесь, что провайдеры в компоненте удалены, чтобы сделать его одиночным.
Попробуйте сохранить экземпляр службы в вашем AppModule
и получить экземпляр (вместо того, чтобы создать его экземпляр) позже в других компонентах.
import {Injector} from '@angular/core';
export class AppModule {
// Allows for retrieving singletons using 'AppModule.injector.get(MyService)' later in the code
static injector: Injector;
constructor(injector: Injector) {
AppModule.injector = injector;
}
}
И для извлечения экземпляра Службы используйте:
const myService = AppModule.injector.get(MyService);
Проверьте документацию Здесь !