将事件从原生发送到离子

问题描述 投票:0回答:1

我正在使用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)
}
    }

然而,这不起作用

cordova ionic-framework events callback
1个回答
1
投票

你的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层。

© www.soinside.com 2019 - 2024. All rights reserved.