无法在点击事件时设置离子本地通知(奇怪的语法错误)

Posted

技术标签:

【中文标题】无法在点击事件时设置离子本地通知(奇怪的语法错误)【英文标题】:Not able to set Ionic Local Notification On Click Event (weird syntax error) 【发布时间】:2018-07-23 13:07:36 【问题描述】:

我在我的应用程序中使用Ionic Local Notifications。到目前为止,我能够在给定时间触发通知。我还想在通知的点击事件上设置自定义操作。但是当我因为语法错误而无法这样做时。 我看了很多example codes 喜欢这个。这是大家用来为点击事件设置动作的通用代码。

 this.plt.ready().then((readySource) => 
    this.localNotifications.on('click', (notification, state) => 
      let json = JSON.parse(notification.data);

      let alert = alertCtrl.create(
        title: notification.title,
        subTitle: json.mydata
      );
      alert.present();
    )
  );

但由于某些未知原因,此代码对我显示语法错误

上面写着

[ts] Expected 1 arguments, but got 2.
(property) HomePage.localNotifications: LocalNotifications

这是我完整的 home.ts 代码: 注意- 我从 home.html 调用提交函数。通知工作正常并按时触发。我只需要在点击操作上实现自定义

import  Component  from '@angular/core';
import  IonicPage, NavController, NavParams, Platform, AlertController  from 'ionic-angular';
import  LocalNotifications  from '@ionic-native/local-notifications';

/**
 * Generated class for the HomePage page.
 *
 * See https://ionicframework.com/docs/components/#navigation for more info on
 * Ionic pages and navigation.
 */

@IonicPage()
@Component(
  selector: 'page-home',
  templateUrl: 'home.html',
)
export class HomePage 
  data =  title: '', description: '', date: '', time: '' ;
  constructor(public navCtrl: NavController, private localNotifications: LocalNotifications, public navParams: NavParams, public platform: Platform,
    public alertCtrl: AlertController) 


    this.platform.ready().then((readySource) => 
      this.localNotifications.on('click', (notification, state) => 
        let alert = this.alertCtrl.create(
          title: 'Notification Clicked'
        );
        alert.present();
      );
    );




  


  submit() 
    console.log(this.data);
    var date = new Date(this.data.date + " " + this.data.time);
    var title = this.data.title;
    var text = this.data.description;
    console.log(date);
    this.localNotifications.schedule(
      title: title,
      text: text,
      trigger: at: date,
      led: 'FF0000',
      sound: this.setSound(),
      actions: [
         id: 'yes', title: 'Yes' ,
         id: 'no', title: 'No' 
      ]
    );



  setSound() 
    if (this.platform.is('android')) 
      return 'file://assets/sounds/Rooster.mp3'
     else 
      return 'file://assets/sounds/Rooster.caf'
    
  

  ionViewDidLoad() 
    console.log('ionViewDidLoad HomePage');
  


【问题讨论】:

【参考方案1】:

正确的函数是:

this.localNotifications.on('click').subscribe(notification => 
       // Insert your logic here
        );

我在 ionic 论坛中找到了这个答案:here

【讨论】:

【参考方案2】:

on() 函数返回一个observablecallback 没有位置。所以你只是在做

this.localNotifications.on('click').subscribe((notification, state) => 
    let alert = this.alertCtrl.create(
          title: 'Notification Clicked'
        );
        alert.present();
);

插件可能无法同时使用通知和状态参数解析,请使用单个参数,例如 resolve: any,记录并查看插件在 click 事件中返回的内容。

【讨论】:

它还显示语法错误:[ts] '(notification: any, state: any) => void' 类型的参数不可分配给'(value: any) => void 类型的参数'。 (参数)状态:任何 这意味着返回的 observable 没有我们预期的两个参数(通知和状态)。这是我讨厌 ionic-native 文档的一件事。他们不会告诉你 observable 解决了什么样的响应。只需设置为 (response: any) 并记录响应以查看您返回的内容。 .subscribe((response: any) => console.log(response)). 我像你说的那样试过了 - this.localNotifications.on('event').subscribe((response: any) => console.log('response:'); console.log(response ); );但我的控制台没有显示任何内容。 对不起。我想我把你和“事件”混淆了。我的意思是任何类型的 DOM/设备事件中的“事件”。比如“点击”。我已经编辑了我的答案。【参考方案3】:
  this.localNotifications.on('click', (notification, state) => 

在这一行中,on 方法只需要一个参数,但你传递了两个

【讨论】:

我明白了,兄弟,我也可以阅读错误日志。我的问题是如何修复它并添加点击操作

以上是关于无法在点击事件时设置离子本地通知(奇怪的语法错误)的主要内容,如果未能解决你的问题,请参考以下文章

使用cordova本地通知和离子设置重复间隔的特定数据和时间

date.getTime 不是函数离子本地通知错误

使用反应测试库测试离子组件

通过调用Local Method响应Vue.js事件总线时丢失上下文

应用程序关闭时,离子 2 本地通知不起作用

奇怪的行为释放APK离子