将日历集成到您的 Ionic 应用程序中

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

对于今天的演示,我决定尝试一些我一直想花时间做的事情——与移动设备上的日历集成。幸运的是,有一个很棒的插件 ——Calendar-PhoneGap-Plugin 。这个插件提供了所有类型的本地日历挂钩,包括搜索和添加事件的能力。有了那个插件,我迅速做了一个演示。

我首先构建了一个应用程序,该应用程序仅从列表中返回事件并按原样显示它们。这是视图:

让我们看看这背后的代码。首先,HTML。由于这个应用程序非常简单,我没有使用路由和模板。


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

这应该都是相当样板的。我只是循环事件并为每个事件创建一个卡片 UI。现在让我们看看控制器代码。


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

是的,只需调用服务并呈现事件即可。琐碎的。现在让我们看看服务。


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

好的,所以这有点复杂。我有一组假数据,可以在未来创建四个事件。该服务然后返回那些假事件。好的,让我们把它提高一个档次。鉴于我们的日历插件可以检查事件,我将更新我的代码以显示事件是否已添加到日历中。这是一个例子。

在此屏幕截图中,您可以看到用于将事件添加到日历的按钮。请注意,第三个事件虽然被识别为在日历中。为了完成这项工作,我更新了事件的服务调用以处理检查日历。这有点复杂,因为每个调用都是异步的,但是 $q 可以很容易地处理它。


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

我在事件上设置一个状态值来表示事件是否存在。回到显示端,我这样处理:


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

很简单,对吧?现在让我们看看添加代码。我将跳过控制器代码,因为它所做的只是调用服务并更新范围。


 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>
&lt;link href="lib/ionic/css/ionic.css" rel="stylesheet"&gt;
&lt;link href="css/style.css" rel="stylesheet"&gt;

&lt;!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
&lt;link href="css/ionic.app.css" rel="stylesheet"&gt;
--&gt;

&lt;!-- ionic/angularjs js --&gt;
&lt;script src="lib/ionic/js/ionic.bundle.js"&gt;&lt;/script&gt;

&lt;!-- cordova script (this will be a 404 during development) --&gt;
&lt;script src="cordova.js"&gt;&lt;/script&gt;

&lt;!-- your app's js --&gt;
&lt;script src="js/app.js"&gt;&lt;/script&gt;
&lt;script src="js/controllers.js"&gt;&lt;/script&gt;
&lt;script src="js/services.js"&gt;&lt;/script&gt;

</head> <body ng-app="starter">

&lt;ion-pane ng-controller="MainCtrl"&gt;
  &lt;ion-header-bar class="bar-stable"&gt;
    &lt;h1 class="title"&gt;Ionic Calendar Demo&lt;/h1&gt;
  &lt;/ion-header-bar&gt;
  &lt;ion-content&gt;

<div class="card" ng-repeat="event in events"> <div class="item item-divider"> {{event.title}} </div> <div class="item item-text-wrap"> {{ event.description }} <p/> <strong>When: {{ event.date | date:'short' }}</strong> </div> </div>

  &lt;/ion-content&gt;
&lt;/ion-pane&gt;

</body> </html>

只是为了证明它有效——这是我刚刚添加的事件:

我已将此演示的完整源代码放在 GitHub 上:https: //github.com/cfjedimaster/Cordova-Examples/tree/master/calendarionic 。我要非常感谢 Eddy Verbruggen 帮助我使用他的插件,并修复了我遇到的错误!

相关文章