我正在使用Ionic / Cordova插件来观看数据集,并希望在本机api触发事件时调用我的typescript类中的函数。到目前为止我所拥有的是:(打字稿文件)
this.platform.ready().then(() =>{
window.plugins.plugin.startFileWatch("Path", (success) =>{console.log("Succes")}, (error) => {Console.log("ERROR"}))
}
然后在插件的java脚本中
startFileWatch: function( path, succesCB, errorCB){
exec(succesCB, errorCB, "Class", "startFileWatch", [path]);
}
并在swift(通过Android解决方案也欢迎):
@objc(startFileWatch:)
func startFileWatch(command:CDVInvokedUrlCommand){
//bit pseudo here
something.addListener{
self?.commandDelage.send(result, callbackID: command.callbackID)
}
}
然而,这不起作用
你的TS和JS脚本看起来不错。而你缺少的是,你没有为未来的触发器保存回调。要触发从Native到TS的动态事件,您需要有一个侦听器,它将在本机层中实际注册回调。然后,此回调用于将事件推送到TS层。
// Android
protected static CallbackContext eventTriggerObj = null;
.....
.....
private boolean registerForEvents ( final CallbackContext callbackContext )
{
eventTriggerObj = callbackContext;
return true;
}
// iOS ( Obj C )
@property ( nonatomic, retain ) NSString * eventTriggerObj ;
.....
.....
- ( void ) registerForEvents :( CDVInvokedUrlCommand * ) command
{
self.eventTriggerObj = command.callbackId;
CDVPluginResult * pluginResult = [ CDVPluginResult
resultWithStatus:CDVCommandStatus_OK ];
[ pluginResult setKeepCallbackAsBool:true ];
[ self.commandDelegate sendPluginResult:pluginResult
callbackId:command.callbackId ];
}
// Swift Code (3+)
private var eventTriggerObj : String
void registerForEvent(command : CDVInvokedUrlCommand){
self.eventTriggerObj = command.callbackId
let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: ["Message"])
pluginResult?.keepCallback = true
self?.commandDelegate.send(pluginResult, callbackId: self?.eventTriggerObj)
}
现在使用回调对象eventTriggerObj将动态事件发送到TS层。