Как использовать NavController внутри провайдера - Ionic - PullRequest
0 голосов
/ 24 октября 2018

Я создал общий поставщик для ионного приложения, и я хочу убедиться, что пользователь вошел в систему или нет, поэтому я создал функцию проверки, чтобы проверить, существует ли токен, но после проверки, что токен является нулевым, я хочу установить Rootстраница, чтобы войти или зарегистрировать страницу, поэтому я использовал navcontroller для установки корневой страницы, но после запуска сервера он показывает ошибку

Ошибка

ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[Content -> NavController]: 
  StaticInjectorError(Platform: core)[Content -> NavController]: 
    NullInjectorError: No provider for NavController!
Error: StaticInjectorError(AppModule)[Content -> NavController]: 
  StaticInjectorError(Platform: core)[Content -> NavController]: 
    NullInjectorError: No provider for NavController!
    at _NullInjector.get (VM1014 vendor.js:1377)
    at resolveToken (VM1014 vendor.js:1675)
    at tryResolveToken (VM1014 vendor.js:1617)
    at StaticInjector.get (VM1014 vendor.js:1485)
    at resolveToken (VM1014 vendor.js:1675)
    at tryResolveToken (VM1014 vendor.js:1617)
    at StaticInjector.get (VM1014 vendor.js:1485)
    at resolveNgModuleDep (VM1014 vendor.js:11270)
    at _createClass (VM1014 vendor.js:11311)
    at _createProviderInstance$1 (VM1014 vendor.js:11281)
    at _NullInjector.get (VM1014 vendor.js:1377)
    at resolveToken (VM1014 vendor.js:1675)
    at tryResolveToken (VM1014 vendor.js:1617)
    at StaticInjector.get (VM1014 vendor.js:1485)
    at resolveToken (VM1014 vendor.js:1675)
    at tryResolveToken (VM1014 vendor.js:1617)
    at StaticInjector.get (VM1014 vendor.js:1485)
    at resolveNgModuleDep (VM1014 vendor.js:11270)
    at _createClass (VM1014 vendor.js:11311)
    at _createProviderInstance$1 (VM1014 vendor.js:11281)
    at c (VM1012 polyfills.js:3)
    at Object.reject (VM1012 polyfills.js:3)
    at NavControllerBase._fireError (VM1014 vendor.js:51258)
    at NavControllerBase._failed (VM1014 vendor.js:51251)
    at VM1014 vendor.js:51298
    at t.invoke (VM1012 polyfills.js:3)
    at Object.onInvoke (VM1014 vendor.js:5134)
    at t.invoke (VM1012 polyfills.js:3)
    at r.run (VM1012 polyfills.js:3)
    at VM1012 polyfills.js:3

common.ts (файл поставщика)

import { NavController } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class CommonProvider {
   base_url : string = "http://192.168.1.198:3000/v1/";
   constructor(public http: HttpClient,public storage:Storage,private 
   navctrl:NavController) {
      console.log('Hello CommonProvider Provider');
    }

  registerUser(values) {
     return this.http.post(this.base_url+'/signups', values);
   }

  loginUser(login) {
     return this.http.post(this.base_url+'/login', login);
   }

  verify(){
     this.storage.get('token').then((val)=>{
      if(val == null){
         this.navctrl.setRoot('LoginPage');
         this.storage.set('page','LoginPage');
       }
    });
  }
}

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Вы не должны использовать navController в провайдере.Он должен быть в файле .ts соответствующей страницы / компонента.

Но, если вы все еще хотите его использовать, вы забыли импортировать navController в своем провайдере.

Добавить

import {NavController} from 'ionic-угловая ';

наверху, и вы готовы идти

0 голосов
/ 24 октября 2018

Вы можете сделать что-то вроде этого:

import { App } from 'ionic-angular';

@Injectable()
export class YourProvider {

  constructor(private app: App) {}

  yourVerifyFunction() {
    this.app.getRootNav().setRoot('YourPage');
  }
}

Приветствия

0 голосов
/ 24 октября 2018

Попробуйте добавить эту строку кода
import { NavController } from 'ionic-angular';

...