在調用相冊文件時有用到photolibrary,總有些莫名的報錯,3月份的時候這個坑讓我不知所措,如今寫下來方便查看(也不知道Ionic2如今是否有變化),入坑過程:java
按照官網示例:ionic
1.添加插件:ide
cmd 到項目目錄運行:函數
ionic plugin add cordova-plugin-photo-library --variable PHOTO_LIBRARY_USAGE_DESCRIPTION="To choose photos"
2. ts文件中添加:this
import { PhotoLibrary } from '@ionic-native/photo-library'; constructor(private photoLibrary: PhotoLibrary) { } this.photoLibrary.requestAuthorization().then(() => { this.photoLibrary.getLibrary().subscribe({ next: library => { library.forEach(function(libraryItem) { console.log(libraryItem.id); // ID of the photo //........ }); }, error: err => {}, complete: () => { console.log("could not get photos"); } }); }) .catch(err => console.log("permissions weren't granted"));
好,這一運行,就出現No provider for PhotoLibrary;spa
查了好久---------,終於發現了這個鬼;插件
在查看PhotoLibrary.java看到了一些靜態的內部的類(沒深刻了解java---大概是這個意思):code
public static XXX{}
而在java中的靜態類 是不能使用繼承的(使用 this、super關鍵字);cordova
因此在.ts文件中就這樣作-------->blog
import { PhotoLibrary } from '@ionic-native/photo-library';
constructor() { //1.構造函數中不注入PhotoLibrary
}
theFunction(){
//2.直接使用--不用this
PhotoLibrary.requestAuthorization().then(() => { PhotoLibrary.getLibrary().subscribe({ next: library => { library.forEach(function(libraryItem) { console.log(libraryItem.id); // ID of the photo //........ }); }, error: err => {}, complete: () => { console.log("could not get photos"); } }); }) .catch(err => console.log("permissions weren't granted")); }
ionViewDidLoad(){
//3.調用方法
this.theFunction();
}
--------------最終調用成功了-------------------
總結:若是遇到相似的靜態類,能夠參照此方法。