如何调用 class 而不在构造函数 angular 中声明它 2

how to call class without declaring it in constructor angular 2

我正在尝试使用 Ionic 2 的 NFC 模块。这是我的代码:

nfc-scan.ts:

    import {Component} from '@angular/core';
    import {IonicPage, NavController, NavParams, Platform} from 'ionic-angular';
    import { Device } from '@ionic-native/device';
    import {NFC, Ndef} from '@ionic-native/nfc';

    @IonicPage()
    @Component({
        selector: 'nfc-scan',
        templateUrl: 'nfc-scan.html',
    })
    export class NfcScan {
        @ViewChild(Nav) nav: Nav;
NFC: NFC;

    constructor(public platform: Platform,
                    public navCtrl: NavController,
                    public navParams: NavParams,
        ) {

        }

    // NFC Scanning
        checkNFC()
        {
            this.NFC.enabled()
                .then(() => {
                    this.addListenNFC();
                })
                .catch(err => {
                    console.log(err);
                });
        }
    }

nfs-scan.html

<ion-content padding>
    <button on (click)="checkNFC()">Scan NFC</button>
</ion-content>

当我 运行 应用程序时,出现错误:

Property 'enabled' does not exist on type 'typeof NFC'.

我知道我没有在 nfc-scan.ts 的构造函数中声明 NFC。但是当我这样做时,页面甚至不会完全加载。

当页面未加载时,您通常会在控制台上看到输出。确保在构造函数中使用私有 nfc:NFC;

我终于找到了解决这个问题的方法。事实证明,如果不在要使用它的 class 的构造函数中声明它,就不能使用 class 。

就我而言,问题是,我是 运行 我机器 (Macbook) 浏览器中的应用程序,而 NFC 插件只能在支持 NFC 的 phone 上实例化(例如相机插件)。话虽如此,Ionic 现在提供了以某种方式模拟插件的能力,以便您可以在计算机的浏览器中使用它们。

To use an Ionic Native plugin in the browser and ionic serve session, you just need to extend the original plugin class and override the methods you’d like to mock.

来源:https://ionicframework.com/docs/native/browser.html

希望对像我这样的人有所帮助。