2016-11-29 74 views
1

我想在设备日历中为我的应用显示事件提醒,并试图使用ngCordova的$cordovaCalendarPhonegap Calendar Plugin来实现此目的。在ngCordova网站上的使用说明我建立ngCordova并安装了插件,但我遇到了以下问题:

TypeError: Cannot read property <code>calendar</code> of undefined

ng-cordova.js文件中的错误指向以下代码:

$window.plugins.calendar.createEvent(
      defaultOptions.title, 
      defaultOptions.location, 
      defaultOptions.notes, 
      new Date(defaultOptions.startDate), 
      new Date(defaultOptions.endDate), 
      function (message) { 
      d.resolve(message); 
      }, function (error) { 
      d.reject(error); 
      } 
     ); 

我的控制器代码:

.controller('CalendarCtrl', function ($scope, $cordovaCalendar) { 
    $cordovaCalendar.createEvent({ 
    title: 'Space Race', 
    location: 'The Moon', 
    notes: 'Bring sandwiches', 
    startDate: new Date(2015, 0, 6, 18, 30, 0, 0, 0), 
    endDate: new Date(2015, 1, 6, 12, 0, 0, 0, 0) 
    }).then(function (result) { 
    // success 
    }, function (err) { 
    // error 
    }); 
}) 

回答

2

这些问题通常是由于未正确安装插件或未等待所有Cordova插件加载而引起的,我想您可能会在这里处理第二个问题。添加$ionicPlatform作为一个依赖和尝试以下操作:

$ionicPlatform.ready(function() { 
    $cordovaCalendar.createEvent({ 
    title: 'Space Race', 
    location: 'The Moon', 
    notes: 'Bring sandwiches', 
    startDate: new Date(2015, 0, 6, 18, 30, 0, 0, 0), 
    endDate: new Date(2015, 1, 6, 12, 0, 0, 0, 0) 
    }).then(function (result) { 
    // success 
    }, function (err) { 
    // error 
    }); 
}); 

$ionicPlatform.ready确保所有的插件都在执行任何的定义函数的范围内之前加载,加载之前,否则你尝试调用该插件。

+0

谢谢。我会试试 – Anuj

+0

它工作正常。它也可以在按钮点击时使用示波器功能 – Anuj

+0

您是否也在使用该插件?我有关于删除过程的问题。首先,它不是按照日期范围删除。就像我在一天中的上午9点和下午8点一样创建了3个事件。然后我只想要最后一个,然后我使用开始日期n结束日期,就像这个需求但它会删除当天的所有活动。\ – Anuj

0

之前提供一个答案,我需要知道followi ng:

  • 你在一个实际的设备或模拟器(而不是浏览器)?
  • 您在HTML中包含了对cordova.js的引用吗?
  • 该插件实际上是添加和证据显示在config.xml?
+0

*我在实际设备上。 *是的,但不需要包含它,因为在构建时它会自动生成。 *插件通过cmd添加并显示在插件列表中,但未在config.xml中显示 – Anuj

+0

插件不必出现在'config.xml'中,即使它已安装。验证插件是否已安装的更好方法是运行'cordova plugins'来列出项目中所有已安装的插件。 – Dexter