【问题标题】:No provider for NavParams error is coming In Ionic App在 Ionic App 中没有出现 NavParams 错误的提供者
【发布时间】:2020-08-06 06:51:41
【问题描述】:

我正在将参数从一个组件传输到 app.component.ts 但错误来了。错误:没有 NavParams 的提供程序。

这是我的 app.component.ts

import { FrontPage } from "./../pages/front/front";
import { Component, ViewChild } from "@angular/core";
import { Nav, Platform, NavController, NavParams } from "ionic-angular";
import { StatusBar } from "@ionic-native/status-bar";
import { SplashScreen } from "@ionic-native/splash-screen";
import { HomePage } from "../pages/home/home";
import { ListPage } from "../pages/list/list";
import { ProductPage } from "../pages/product/product";
import { LoginpagePage } from "../pages/loginpage/loginpage";

@Component({
  templateUrl: "app.html",
})
export class MyApp {
  @ViewChild(Nav) nav: Nav;
  menuclick: boolean = true;
  menuclick2: boolean = false;
  rootPage: any = FrontPage;
  uname: string;

  pages: Array<{ title: string; component: any; name2: string }>;

  constructor(
    public platform: Platform,
    public statusBar: StatusBar,
    public splashScreen: SplashScreen,
    public navParams: NavParams
  ) {
    this.initializeApp();
    this.uname = this.navParams.get("param1");
    this.pages = [
      { title: "Home", component: FrontPage, name2: "home" },
      { title: "Product Categories", component: ProductPage, name2: "basket" },
      { title: "Merchandise", component: ProductPage, name2: "man" },
      { title: "My Orders", component: ProductPage, name2: "cart" },
    ];
  }

  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
    });
  }

  openPage(page) {
    this.nav.setRoot(page.component);
  }

  loginpage2() {
    this.nav.push(LoginpagePage);
  }

  logoutClicked() {
    console.log("Logout");
    this.nav.pop();
  }
}

在这个组件中,我得到这样的 navparam 值 this.uname = this.navParams.get('param1');

这是我的loginpage.ts

import { Component } from "@angular/core";
import {
  IonicPage,
  NavController,
  NavParams,
  AlertController,
} from "ionic-angular";
import { RestapiProvider } from "../../providers/restapi/restapi";
import { ListPage } from "../list/list";
import { FrontPage } from "../front/front";
import { CartPage } from "./../cart/cart";
import { Validators, FormBuilder, FormGroup } from "@angular/forms";
import { MyApp } from "./../../app/app.component";

@IonicPage()
@Component({
  selector: "page-loginpage",
  templateUrl: "loginpage.html",
})
export class LoginpagePage {
  todo: FormGroup;
  responseData: any;
  userData = { username: "", password: "" };
  constructor(
    public navCtrl: NavController,
    public navParams: NavParams,
    public restProvider: RestapiProvider,
    private formBuilder: FormBuilder,
    private alertCtrl: AlertController
  ) {
    this.todo = this.formBuilder.group({
      username: ["", Validators.required],
      password: ["", Validators.required],
    });
  }

  ionViewDidLoad() {
    console.log("ionViewDidLoad LoginpagePage");
  }

  getloginUsers() {
    this.restProvider
      .getUsers(this.userData, "user_Login")
      .subscribe((data) => {
        console.log(data);
        if (data) {
          this.responseData = data;
          console.log(this.responseData.msg.name);
          if (this.responseData.status === "success") {
            this.navCtrl.push(MyApp, {
              param1: this.responseData.msg.name,
            });
          } else {
            this.presentAlert();
          }
        }
      });
  }

  presentAlert() {
    let alert = this.alertCtrl.create({
      title: "Incorrect Username Or Password",
      buttons: ["Dismiss"],
    });
    alert.present();
  }

  cardpage2() {
    this.navCtrl.push(CartPage);
  }
}

错误:NavParams 没有提供程序即将到来。非常感谢任何帮助。

【问题讨论】:

  • 当您没有在提供程序数组中提供服务时,通常会发生此错误。请检查一下
  • @AnkurShah。提供者:[ NavParams ],我在 app.module.ts 中添加了这个。
  • @AnkurShah。您能否为此提供答案。请。
  • @AnkurShah。导入后出现此错误。无法解析 NavParams 的所有参数:(?)。
  • @Ragav 你能否提供给你一个错误的示例源项目

标签: angular ionic-framework ionic3


【解决方案1】:

您能否尝试添加。希望它可能有效。如果你给我一个项目,我可以更好地帮助你。

@Component({
 selector: 'page-loginpage',
 templateUrl: 'loginpage.html',
 providers: [NavParams]
})

【讨论】:

  • 这有帮助吗?
  • 错误。 '{ selector: string; 类型的参数模板网址:字符串;提供者:(NavParams 类型)[]; }' 不可分配给“组件”类型的参数。对象字面量只能指定已知属性,但“组件”类型中不存在“提供者”。你的意思是写“提供者”吗? [2345]
  • 我应该提供我的 anydesk ID。
  • 我想,应该是提供者。
  • 添加后显示错误。无法解析 NavParams 的所有参数:(?)。
【解决方案2】:

我找到了解决方案 而不是在constructor中添加navParams

添加public navParams = new NavParams

例如

export class LoginpagePage {
  public navParams = new NavParams();
  todo: FormGroup;
  responseData: any;
  userData = { username: "", password: "" };

  constructor(public navCtrl: NavController) {};
}

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我必须做两件事来解决它:

    • 从 app-routing-module.ts 中移除模态路由条目
    • 像这样更新模态模块中的以下条目:
    @NgModule({
         imports: [
           CommonModule,
           FormsModule,
           IonicModule
           ],
         declarations: [DetailsPage],
      entryComponents:[DetailsPage]
    })
    
    export class DetailsPageModule {}
    

    通过这两个更改,我能够在 de Modal ts 文件中使用像这样的 navParams:

    ionViewWillEnter() {
       this.selectedItem = this.navParams.get('selectedItem');
       console.log(this.selectedItem);
     }
    

    【讨论】:

      【解决方案4】:

      使用ActivatedRoute接口从'@angular/router'简单地检索查询参数:

      public constructor(private route: ActivatedRoute) {
          this.route.queryParams.subscribe(params => {
              this.firstname = params["param1"];
          });
      }
      

      【讨论】:

        【解决方案5】:

        您是否在@NgModule 中导入了离子角度模块?

         imports: [
            BrowserModule,
            IonicModule.forRoot(MyApp, {
        
            })
          ],
        

        【讨论】:

        • imports: [IonicModule.forRoot(MyApp), ],我在 app.module.ts 中导入了这个。
        • 我还必须导入登录组件吗?
        【解决方案6】:

        我用这个变种

        const params = {
          phone,
          verificationId,
        };
        this.navCtrl.navigateForward("/forward-page", { state: params });
        

        在转发页面中

        constructor(private router: Router) {
            const state = this.router.getCurrentNavigation().extras.state
            if (state) {
                this.phone = state.phone;
                this.verificationId = state.verificationId;
            }
        }
        

        效果很好

        【讨论】:

          【解决方案7】:

          我得出的结论是,app.component.ts 是在您的应用程序中呈现的第一件事。您无法导航到它,显然,您无法接收参数。

          第一个解决方案是:我必须使用提供程序来存储您的用户数据,然后从提供程序设置您的侧边菜单数据。

          第二种解决方案是:如下使用事件。

          通过使用事件,我已经解决了我的问题并且我的事件代码工作正常。

          import { Events } from 'ionic-angular';
          
          // first page (publish an event when a user is created)
          constructor(public events: Events) {}
          createUser(user) {
            console.log('User created!')
            this.events.publish('user:created', user, Date.now());
          }
          
          
          // second page (listen for the user created event after function is called)
          constructor(public events: Events) {
            events.subscribe('user:created', (user, time) => {
              // user and time are the same arguments passed in `events.publish(user, time)`
              console.log('Welcome', user, 'at', time);
            });
          }
          

          【讨论】:

            猜你喜欢
            • 2018-11-27
            • 2018-04-24
            • 2017-12-28
            • 2022-12-17
            • 2018-05-09
            • 2018-09-22
            • 2020-05-12
            • 2018-03-01
            • 2018-10-19
            相关资源
            最近更新 更多