{"id":1699,"date":"2018-12-27T16:29:11","date_gmt":"2018-12-27T15:29:11","guid":{"rendered":"http:\/\/blog.via-internet.de\/?p=1699"},"modified":"2018-12-27T16:29:11","modified_gmt":"2018-12-27T15:29:11","slug":"learning-ionic-create-a-simple-calculator","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2018\/12\/27\/learning-ionic-create-a-simple-calculator\/","title":{"rendered":"Ionic | Create a simple Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Sources for this tutorial are <a href=\"https:\/\/github.com\/ionic4-toolbox\/App-Calculator\">here<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preparation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Clone the example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/ionic4-toolbox\/App-Calculator.git<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Starting from new<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, make sure that you are  using the current ionic version.If you are new to ionic , then look <a href=\"http:\/\/blog.via-internet.de\/blog\/2018\/11\/09\/ionic-4-installation-on-unix\/?preview_id=1391&amp;preview_nonce=f8a18d0a7f&amp;preview=true\">here<\/a> for an installation guide.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"true\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm -g install ionic@latest<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Create App<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"true\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ionic start Calculator sidemenu --type angular --no-link --no-git\ncd Calculator<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Add a new page for our calculator<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"true\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ionic generate page Calculator<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Add new page to sidemenu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add link to page in app.components.ts file<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  public appPages = [\n    { title: 'Home', url: '\/home', icon: 'home' },\n    { title: 'List', url: '\/list', icon: 'list' },\n    { title: 'Calculator', url: '\/calculator', icon: 'grid'\n    }\n  ];<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Add calculation logic to typescript file<\/h3>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">4public appPages = [\n    { title: 'Home', url: '\/home', icon: 'home' },\n    { title: 'List', url: '\/list', icon: 'list' },\n    { title: 'Calculator', url: '\/calculator', icon: 'grid' }\n];<\/pre>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Add html layout<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The layout of our page consists of a header row containing the result and 4 rows containing the buttons of our calculator.<\/p>\n\n\n\n<table>\n<tr style=\"background-color: #a0a0a0\"><td style=\"border: 1px solid black\">Header<\/td><\/tr>\n<tr><td>Row 1<\/td><\/tr>\n<tr><td>Row 2<\/td><\/tr>\n<tr><td>Row 3<\/td><\/tr>\n<\/table>\n\n\n\n<p class=\"wp-block-paragraph\">Each row for our keys is build with 5 columns.<\/p>\n\n\n\n<table>\n<tr style=\"background-color: #a0a0a0\">\n    <td colspan=5 style=\"border: 1px solid black\">Header<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">Row1, Col1<\/td>\n    <td style=\"border: 1px solid black\">Row1, Col2<\/td>\n    <td style=\"border: 1px solid black\">Row1, Col3<\/td> \n    <td style=\"border: 1px solid black\">Row1, Col4<\/td>\n    <td style=\"border: 1px solid black\">Row1, Col5<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">Row2, Col1<\/td>\n    <td style=\"border: 1px solid black\">Row2, Col2<\/td>\n    <td style=\"border: 1px solid black\">Row2, Col3<\/td> \n    <td style=\"border: 1px solid black\">Row2, Col4<\/td>\n    <td style=\"border: 1px solid black\">Row2, Col5<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">Row3, Col1<\/td>\n    <td style=\"border: 1px solid black\">Row3, Col2<\/td>\n    <td style=\"border: 1px solid black\">Row3, Col3<\/td> \n    <td style=\"border: 1px solid black\">Row3, Col4<\/td>\n    <td style=\"border: 1px solid black\">Row3, Col5<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">Row4, Col1<\/td>\n    <td style=\"border: 1px solid black\">Row4, Col2<\/td>\n    <td style=\"border: 1px solid black\">Row4, Col3<\/td> \n    <td style=\"border: 1px solid black\">Row4, Col4<\/td>\n    <td style=\"border: 1px solid black\">Row4, Col5<\/td>\n<\/tr>\n<\/table>\n\n\n\n<p class=\"wp-block-paragraph\">Add within the table cells, we place our buttons<\/p>\n\n\n\n<table>\n<tr style=\"background-color: #a0a0a0\">\n    <td colspan=5 style=\"border: 1px solid black\">Header<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">7<\/td>\n    <td style=\"border: 1px solid black\">8<\/td>\n    <td style=\"border: 1px solid black\">9<\/td> \n    <td style=\"border: 1px solid black\">&times;<\/td>\n    <td style=\"border: 1px solid black\">&divide;<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">4<\/td>\n    <td style=\"border: 1px solid black\">5<\/td>\n    <td style=\"border: 1px solid black\">6<\/td> \n    <td style=\"border: 1px solid black\">+<\/td>\n    <td style=\"border: 1px solid black\">&#8211;<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">1<\/td>\n    <td style=\"border: 1px solid black\">2<\/td>\n    <td style=\"border: 1px solid black\">3<\/td> \n    <td style=\"border: 1px solid black\">x<sup>2<\/sup><\/td>\n    <td style=\"border: 1px solid black\">\u221ax<\/td>\n<\/tr>\n<tr>\n    <td style=\"border: 1px solid black\">C<\/td>\n    <td style=\"border: 1px solid black\">0<\/td>\n    <td style=\"border: 1px solid black\">,<\/td> \n    <td style=\"border: 1px solid black\">1\/x<\/td>\n    <td style=\"border: 1px solid black\">=<\/td>\n<\/tr>\n<\/table>\n\n\n\n<p class=\"wp-block-paragraph\">We implement our layout with div&#8217;s instead of a html table. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So every row is a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;div class=\"row\">\n...\n&lt;\/div><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And within the row we define our buttons also as divs<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;div class=\"number\">\n   &lt;span (click)=\"btnClicked('4')\">4&lt;\/span>\n   &lt;span (click)=\"btnClicked('5')\">5&lt;\/span>\n   &lt;span (click)=\"btnClicked('6')\">6&lt;\/span>\n&lt;\/div>\n&lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('+')\">+&lt;\/span>&lt;\/div>\n&lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('-')\">-&lt;\/span>&lt;\/div><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The final html layout looks like this:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;ion-header>\n  &lt;ion-toolbar>\n    &lt;ion-buttons slot=\"start\">\n      &lt;ion-menu-button>&lt;\/ion-menu-button>\n    &lt;\/ion-buttons>\n    &lt;ion-title>Rechner&lt;\/ion-title>\n  &lt;\/ion-toolbar>\n&lt;\/ion-header>\n&lt;ion-content>\n  &lt;div class=\"calculator\">\n    &lt;div class=\"header\">\n      &lt;div class=\"window\">&lt;\/div>\n      &lt;div class=\"input\">&lt;span>\n          &lt;ion-input type=\"text\" placeholder=\"0\" name=\"display\"\n                     [(ngModel)]=\"result\">\n          &lt;\/ion-input>\n        &lt;\/span>&lt;\/div>\n    &lt;\/div>\n    &lt;div class=\"keys\">\n      &lt;div class=\"row\">\n        &lt;div class=\"number\">\n          &lt;span (click)=\"btnClicked('7')\">7&lt;\/span>\n          &lt;span (click)=\"btnClicked('8')\">8&lt;\/span>\n          &lt;span (click)=\"btnClicked('9')\">9&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('*')\">\u00d7&lt;\/span>&lt;\/div>\n        &lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('\/')\">\u00f7&lt;\/span>&lt;\/div>\n      &lt;\/div>\n      &lt;div class=\"row\">\n        &lt;div class=\"number\">\n          &lt;span (click)=\"btnClicked('4')\">4&lt;\/span>\n          &lt;span (click)=\"btnClicked('5')\">5&lt;\/span>\n          &lt;span (click)=\"btnClicked('6')\">6&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('+')\">+&lt;\/span>&lt;\/div>\n        &lt;div class=\"symbol\">&lt;span (click)=\"btnClicked('-')\">-&lt;\/span>&lt;\/div>\n      &lt;\/div>\n      &lt;div class=\"row\">\n        &lt;div class=\"number\">\n          &lt;span (click)=\"btnClicked('1')\">1&lt;\/span>\n          &lt;span (click)=\"btnClicked('2')\">2&lt;\/span>\n          &lt;span (click)=\"btnClicked('3')\">3&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol\">\n          &lt;span (click)=\"btnClicked('square')\">x&lt;sup>2&lt;\/sup>&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol\">\n          &lt;span (click)=\"btnClicked('squareroot')\">\u221ax&lt;\/span>\n        &lt;\/div>\n      &lt;\/div>\n      &lt;div class=\"row\">\n        &lt;div class=\"number\">\n          &lt;span class=dull (click)=\"btnClicked('C')\">C&lt;\/span>\n          &lt;span (click)=\"btnClicked('0')\">0&lt;\/span>\n          &lt;span (click)=\"btnClicked(',')\">,&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol\">\n          &lt;span (click)=\"btnClicked('reciproc')\">1\/x&lt;\/span>\n        &lt;\/div>\n        &lt;div class=\"symbol action\">\n          &lt;span (click)=\"btnClicked('=')\">=&lt;\/span>\n        &lt;\/div>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/div>\n&lt;\/ion-content><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Add css definitions<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">html,\nbody {\n    width: 100\n    height: 100\n    margin: 0;\n    padding: 0;\n    font-family: \"Trebuchet MS\", Helvetica, sans-serif;\n    font-size: 28px;\n}\nbody {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    background-color: #f5f5f5;\n}\n.calculator {\n    margin: 20px;\n    widows: 100px;\n    border-radius: 10px;\n    box-shadow: 0 25px 60px -10px rgba(0, 0, 0, 0.5);\n    .header {\n        background-color: #000;\n        height: 120px;\n        border-radius: 10px 10px 0 0;\n        .window {\n            height: 15px;\n            display: flex;\n            justify-content: flex-start;\n            padding: 10px;\n            span {\n                width: 10px;\n                height: 10px;\n                border-radius: 50\n                margin-right: 5px;\n                cursor: pointer;\n                &amp;.red {\n                    background-color: #ff5252;\n                }\n                &amp;.yellow {\n                    background-color: #f5a623;\n                }\n                &amp;.green {\n                    background-color: #73c21d;\n                }\n            }\n        }\n        .input {\n            background-color: #ff0300;\n            color: #ffffff;\n            padding: 10px 30px;\n            font-size: 28px;\n            span {\n                text-align: right;\n                color: #ffffff;\n            }\n        }\n    }\n    .keys {\n        background: linear-gradient(135deg, #3a3a3a, #000000);\n        height: 280px;\n        border-radius: 0 0 10px 10px;\n        font-size: 24px;\n        .row {\n            height: 70px;\n            display: flex;\n            flex-direction: row;\n            .number {\n                width: 75\n                display: flex;\n                color: #ffffff;\n                span {\n                    width: calc(100\n                    height: 70px;\n                    text-align: center;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    user-select: none;\n                    cursor: pointer;\n                }\n            }\n            .symbol {\n                width: 25\n                background-color: #ffffff;\n                font-size: 34px;\n                span {\n                    width: 100\n                    height: 70px;\n                    text-align: center;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    user-select: none;\n                    cursor: pointer;\n                }\n                &amp;.action {\n                    background: linear-gradient(60deg, #ff0300, #ffa100);\n                    border-radius: 0 0 10px 0;\n                    color: #ffffff;\n                    box-shadow: 0 25px 60px -10px rgba(255, 10, 0, 0.5);\n                }\n            }\n        }\n    }\n}\n.dull {\n    font-size: 14px;\n    font-weight: bold;\n    color: #4a4a4a;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Add javascript code for page<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { Component, OnInit } from '@angular\/core';\n@Component({\n\tselector: 'app-calculator1',\n\ttemplateUrl: '.\/calculator.page.html',\n\tstyleUrls: ['.\/calculator.page.scss'],\n})\nexport class CalculatorPage implements OnInit {\n\tresult = \"\";\n\tconstructor() { }\n\tngOnInit() {\n\t}\n\tbtnClicked(btn) {\n\t\tconsole.log('CalculatorPage::btnClicked = ' + btn);\n\t\tif (btn == \"C\") {\n\t\t\tthis.result = \"\";\n\t\t} else if (btn == \"=\") {\n\t\t\tthis.result = eval(this.result);\n\t\t} else if (btn == \"squareroot\") {\n\t\t\tthis.result = Math.sqrt(eval(this.result)) + \"\";\n\t\t} else if (btn == \"square\") {\n\t\t\tthis.result = eval(\"(\" + this.result + \") * ( \" + this.result + \")\");\n\t\t} else if (btn == \"reciproc\") {\n\t\t\tthis.result = eval(1 + \"\/ (\" + this.result + \")\");\n\t\t} else {\n\t\t\tthis.result += btn;\n\t\t}\n\t}\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">The final result<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/blog.via-internet.de\/wp-content\/uploads\/2018\/12\/Bildschirmfoto-2018-12-27-um-16.54.23-700x325.png\" alt=\"\" class=\"wp-image-1720\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Sources for this tutorial are here. Preparation Clone the example Starting from new Before starting, make sure that you are using the current ionic version.If you are new to ionic , then look here for an installation guide. Create App Add a new page for our calculator Add new page to sidemenu Add link to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1720,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[98,35],"tags":[],"class_list":["post-1699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ionic","category-ionic-4"],"jetpack_featured_media_url":"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2018\/12\/Bildschirmfoto-2018-12-27-um-16.54.23.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/1699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=1699"}],"version-history":[{"count":0,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/1699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media\/1720"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=1699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=1699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=1699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}