Web开发笔记:Ionic实现表格展示数据

混合开发Ionic+angular快速开发App 对于新入门的移动开发者而言,摆在面前的移动应用开发有三种口味 Native App: 本地应用程序(原生App) Web App:网页应用程序(移动web) Hybrid App:混合应用程序(混合App) Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。目前已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、... 阅读详情

1.accountgrid.page.html

<ion-content style="overflow: scroll;" (ionScroll)="ionScroll()" scroll-events='true' id='Content'>

    <!-- 查询条件  -->
    <div id="CONTENT_TOP" style="width: 100%; border: tomato 1px solid;">
        <form (submit)='selectData(conditionsInfo)' action="" method="POST">
            <ion-row>
                <ion-col size="auto" class="ion_col_self_css">
                    <ion-label> 记账日期: </ion-label>
                </ion-col>
                <ion-col size="4">
                    <ion-datetime [(ngModel)]="conditionsInfo.START_TIME" name='START_TIME'
                        class="el_border_radiusAndbackcolor" display-format='YYYY-MM-DD' placeholder="" cancelText="取消"
                        doneText="确定"></ion-datetime>
                </ion-col>
                <ion-col size="auto" class="ion_col_self_css">
                    <ion-label> - </ion-label>
                </ion-col>
                <ion-col size="4">
                    <ion-datetime [(ngModel)]="conditionsInfo.END_TIME" name='END_TIME'
                        class="el_border_radiusAndbackcolor" display-format='YYYY-MM-DD' placeholder="" cancelText="取消"
                        doneText="确定"></ion-datetime>
                    <!-- <app-date-time-picker [(ngModel)]="conditionsInfo.MONEY_USE_TIME" name='MONEY_USE_TIME'></app-date-time-picker> -->
                </ion-col>

            </ion-row>
            <ion-row>
                <ion-col size="auto" class="ion_col_self_css">
                    <ion-label> 收支类型: </ion-label>
                </ion-col>
                <ion-col size='4'>
                    <ion-select [(ngModel)]="conditionsInfo.PaymentType" name='PaymentType'
                        class="el_border_radiusAndbackcolor" placeholder="" interface="popover" cancelText="取消"
                        okText="确定">
                        <!-- 动态循环添加选择项 -->
                        <ion-select-option *ngFor="let item of PaymentType" value="{{item.value}}">
                            {{item.description}}
                        </ion-select-option>
                    </ion-select>
                    <!-- <ion-input [(ngModel)]="newData.UseType" name='UseType' type="text"> </ion-input> -->
                </ion-col>
            </ion-row>
            <!-- <ion-searchbar placeholder="" animated showCancelButton cancelButtonText=""></ion-searchbar> -->
            <ion-row>
                <ion-col class="ion_col_self_css">
                    <ion-button id='selectBtn' expand='full' color="primary" type='submit'> 查询 </ion-button>
                </ion-col>
            </ion-row>
        </form>
    </div>
    <!-- 查询条件  -->
    <!-- slot="fixed":固定在底部,使悬浮按钮不会随着页面滚动 -->
    <ion-fab id="addData_FabBtn" vertical="bottom" horizontal="end" slot="fixed">
        <!-- 返回顶部功能 -->
        <ion-fab-button hidden id='BackTop' (click)="backContentTop()" size='small'>
            <ion-icon name="xu-fanhuidingbu1"></ion-icon>
        </ion-fab-button>
    </ion-fab>

    <div id="CONTENT_BOTTOM" style="overflow-x:scroll;position: fixed; border:rgb(0, 60, 255) 1px solid;">

        <ion-grid style="overflow-x: scroll;width:215%;">
            <!-- <ion-row *ngFor="let row of rowCount">
                <ion-col class="grid_col_rgb" *ngFor="let col of colCount">{{col}}</ion-col>
            </ion-row> -->
            <div id='firstRow' class="firstRow_scroll_Default">
                <ion-row>
                    <ng-container *ngFor="let col of colCount">
                        <ng-container *ngIf="col==='使用说明'; else elseTemplate">
                            <ion-col class="grid_col_rgb_header" size='3'> {{col}}</ion-col>
                        </ng-container>
                        <ng-template #elseTemplate>
                            <ion-col class="grid_col_rgb_header" size='1'>{{col}}</ion-col>
                        </ng-template>
                    </ng-container>
                </ion-row>
            </div>
            <div style="width: 150%;">
                <ng-container *ngFor="let item of QueryData;let i=index">
                
                <ng-container *ngIf="i%2===0; else elseTemplate">
                    <ion-row>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.MONEY_USE_TIME}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.AMOUNT}}</ion-col>
                        <ion-col size='3' class="grid_col_rgb_o">{{item.MONEY_USE_DESC}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.PaymentWayDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.UseTypesDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.NAME}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.PaymentTypeDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_o">{{item.ACCOUNT_DATE}}</ion-col>
                    </ion-row>
                </ng-container>
                <ng-template #elseTemplate>
                    <ion-row >
                        <ion-col size='1' class="grid_col_rgb_j">{{item.MONEY_USE_TIME}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.AMOUNT}}</ion-col>
                        <ion-col size='3' class="grid_col_rgb_j">{{item.MONEY_USE_DESC}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.PaymentWayDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.UseTypesDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.NAME}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.PaymentTypeDesc}}</ion-col>
                        <ion-col size='1' class="grid_col_rgb_j">{{item.ACCOUNT_DATE}}</ion-col>
                    </ion-row>
                </ng-template>
            </ng-container>
                
            </div>
        </ion-grid>
    </div>

</ion-content>

 

2.accountgrid.page.ts

import { Component, OnInit ,Renderer2,ElementRef} from '@angular/core';
import { TabsPage } from "../tabs/tabs.page";
import { GlobalVariable } from "../global-variable/global-variable";
import { DBManagerService } from '../dbmanager/dbmanager.service';
import { ToastController } from '@ionic/angular';
@Component({
  selector: 'app-accountgrid',
  templateUrl: './accountgrid.page.html',
  styleUrls: ['./accountgrid.page.scss'],
})
export class AccountgridPage implements OnInit {

  //#region 定义全局变量
  public rowCount: any[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30];
  public colCount: any[] = ['使用日期', '金额', '使用说明', '支付类型', '使用类型', '姓名', '收支类型', '记账日期'];
  private SELECT_CONDITIONS: any; // 查询条件
  public QueryData: any[] = []; // 查询结果
  public UseTypes: any[] = [];// 使用类型
  public PaymentWay: any[] = []; // 付款方式
  public PaymentType: any[] = []; // 收支类型

  public itemCount: number=1;

  private win: any = window;
  private elBackTop = null; // 返回顶部按钮
  private elContent = null; // 内容标签
  private firstRow = null; // Grid第一行对象

  private CONTENT_TOP=null;//内容上部分
  private CONTENT_BOTTOM=null;//内容下部分
  /**
  * 查询条件信息
  */
  public conditionsInfo = {
    START_TIME: new Date().toDateString(),
    END_TIME: new Date().toDateString(),
    PaymentType: ''
  };
  //#endregion

  constructor(
    public tabsPage: TabsPage,
    public globalVariable: GlobalVariable,
    public dbManagerService: DBManagerService,
    public toastController: ToastController,
    public renderer2: Renderer2,
    public elementRef: ElementRef,
  ) {
    tabsPage.tabTitle = '记账明细'; // 在页面首次加载时默认传值给TabsPage的tabTitle变量用于改变标题栏
    this.UseTypes = this.globalVariable.UseTypes; // 使用类型
    this.PaymentWay = this.globalVariable.PaymentWay;
    this.PaymentType = this.globalVariable.PaymentType;
    
  }
  ngAfterViewChecked(): void {
    //Called after every check of the component's view. Applies to components only.
    //Add 'implements AfterViewChecked' to the class.
    this.tabsPage.currentPageInfo = this.globalVariable.pageInfo[0].AccountGrid;
    this.tabsPage.SON_TABNAME_NOW = 'AccountGrid';
  }
  //当页面完全进入并且现在是活动页面时运行。无论是第一次加载还是缓存页面,此事件都会触发。
   ionViewDidEnter(){
     this.CONTENT_TOP = this.elementRef.nativeElement.querySelector('#CONTENT_TOP');
        //  console.log("当前CONTENT_TOPDIV标签对象offsetHeight:",this.CONTENT_TOP.offsetHeight);
    this.CONTENT_BOTTOM = this.elementRef.nativeElement.querySelector('#CONTENT_BOTTOM');
    // console.log("当前CONTENT_BOTTOM_DIV标签对象:",this.CONTENT_BOTTOM);
    let height = this.elementRef.nativeElement.clientHeight -this.CONTENT_TOP.offsetHeight + 'px';
    // console.log('最终高度height:',height);
    this.renderer2.setStyle(this.CONTENT_BOTTOM,'height',height);
  }
  
  ngOnInit() {
    this.elBackTop = this.elementRef.nativeElement.querySelector('#BackTop');
    this.elContent = this.elementRef.nativeElement.querySelector('#Content');
    this.firstRow = this.elementRef.nativeElement.querySelector('#firstRow');
    
    // console.log("当前elementRef对象:",this.elementRef);
    // console.log("当前elContent标签对象:",this.elContent);
  }

  // 查询数据
  selectData(data: any) {
    try {

      if (data !== undefined) {
        this.SELECT_CONDITIONS = data;
        const START_TIME = new Date(data.START_TIME);
        const END_TIME = new Date(data.END_TIME);
        // console.log('日期:',ACCOUNT_DATE);
        data.START_TIME = START_TIME.toLocaleDateString();
        data.END_TIME = END_TIME.toLocaleDateString();
        // console.log('传入参数data:', data);
        // data.ACCOUNT_DATE = data.ACCOUNT_DATE.replace('-','');
        // this.globalVariable.sqlParamInfo = []; // 重置
        // // console.log('当前表单提交数据:', data);
        // // console.log('sql语句拼接参数信息:', this.globalVariable.sqlParamInfo);
        // this.globalVariable.sqlParamInfo.push(
        //   { colName: 'ACCOUNT_DATE', colValue: data.ACCOUNT_DATE },
        //   { colName: 'PAYMENT_WAY', colValue: data.PaymentWay }
        // );
        // console.log('sql语句拼接参数信息:', this.globalVariable.sqlParamInfo);
        const sql = " SELECT * FROM (" +
          " SELECT ACCOUNT_DATE,MONEY_USE_TIME," +
          "AMOUNT,PAYMENT_TYPE,PAYMENT_WAY," +
          "MONEY_UST_TYPE,MONEY_USE_DESC, '' NAME  FROM money_useinfo  WHERE 1=1   " +
          " UNION ALL  " +
          " SELECT ACCOUNT_DATE,MONEY_USE_TIME," +
          " AMOUNT,PAYMENT_TYPE,PAYMENT_WAY, " +
          " MONEY_UST_TYPE,MONEY_USE_DESC,NAME " +
          " FROM renqing  WHERE 1=1  )";
        let sql_where = " WHERE 1=1 AND ACCOUNT_DATE>='" + data.START_TIME + "'" +
          " AND ACCOUNT_DATE<='" + data.END_TIME + "'";
        if (data.PaymentType !== "") {
          sql_where += " AND PAYMENT_TYPE='" + data.PaymentType + "'";
        }
        const sql2 = " UNION ALL" +
          " SELECT" +
          "   '' ACCOUNT_DATE," +
          "   '合计:'		MONEY_USE_TIME," +
          "   SUM(AMOUNT) AMOUNT," +
          "   ''		PAYMENT_TYPE," +
          "   ''		PAYMENT_WAY," +
          "   ''		MONEY_UST_TYPE," +
          "   ''		MONEY_USE_DESC," +
          "   '' NAME" +
          " FROM" +
          "   (" +
          "     SELECT" +
          "        ACCOUNT_DATE," +
          "       MONEY_USE_TIME," +
          "       AMOUNT," +
          "       PAYMENT_TYPE," +
          "       PAYMENT_WAY," +
          "       MONEY_UST_TYPE," +
          "        MONEY_USE_DESC," +
          "        '' NAME" +
          "      FROM" +
          "        money_useinfo" +
          "      WHERE" +
          "       1 = 1" +
          "     UNION ALL" +
          "      SELECT" +
          "        ACCOUNT_DATE," +
          "        MONEY_USE_TIME," +
          "         AMOUNT," +
          "         PAYMENT_TYPE," +
          "         PAYMENT_WAY, " +
          "         MONEY_UST_TYPE, " +
          "           MONEY_USE_DESC, " +
          "        NAME " +
          "       FROM " +
          "         renqing " +
          "       WHERE " +
          "         1 = 1 " +
          "   ) ";
        const sql_order = " ORDER BY MONEY_USE_TIME DESC ";
        // 调用查询方法
        this.dbManagerService.SelectDataBySQL(sql+sql_where +sql2+ sql_where + sql_order)
          .then((success) => {
            if (this.win.sqlitePlugin) {
              this.QueryData = [];
              for (let index = 0; index < success.res.rows.length; index++) {
                for (const UseTypes of this.UseTypes) {
                  if (success.res.rows.item(index).MONEY_UST_TYPE === UseTypes.value) {
                    success.res.rows.item(index).UseTypesDesc = UseTypes.description; // 添加使用类型中文描述
                    // console.log('row:', row);
                  }
                }
                for (const PaymentWay of this.PaymentWay) {
                  if (success.res.rows.item(index).PAYMENT_WAY === PaymentWay.value) {
                    success.res.rows.item(index).PaymentWayDesc = PaymentWay.description; // 添加支付方式中文描述
                  }
                }
                for (const PaymentType of this.PaymentType) {
                  if (success.res.rows.item(index).PAYMENT_TYPE === PaymentType.value) {
                    success.res.rows.item(index).PaymentTypeDesc = PaymentType.description; // 添加收支类型中文描述
                  }
                }
                this.QueryData.push(success.res.rows.item(index));
              }
            } else {
              this.QueryData = [];
              for (const row of success.res.rows) {
                for (const UseTypes of this.UseTypes) {
                  if (row.MONEY_UST_TYPE === UseTypes.value) {
                    row.UseTypesDesc = UseTypes.description; // 添加使用类型中文描述
                  }
                }
                for (const PaymentWay of this.PaymentWay) {
                  if (row.PAYMENT_WAY === PaymentWay.value) {
                    row.PaymentWayDesc = PaymentWay.description; // 添加支付方式中文描述
                  }
                }
                for (const PaymentType of this.PaymentType) {
                  if (row.PAYMENT_TYPE === PaymentType.value) {
                    row.PaymentTypeDesc = PaymentType.description; // 添加收支类型中文描述
                  }
                }
                this.QueryData.push(row); // 将结果中的数据赋值给QueryData对象,在前端可以直接使用ngfor访问QueryData

              }
            }
          }, (error) => {
            console.log(error);
            const toast = this.toastController.create({
              message: error,
              duration: 3000, // 3秒后自动消失
              position: 'top', // 位置
              showCloseButton: true,
              closeButtonText: '关闭'
            });
            toast.then((ok) => {
              ok.present(); //  符合触发条件后立即执行显示
            });
          });
      }
    } catch (error) {
      console.log('错误信息:', error);
    }
  }

  //#region  返回顶部功能
  // 返回顶部按钮
  backContentTop() {
    this.renderer2.setAttribute(this.elBackTop, 'hidden', 'true');
    this.elContent.scrollToTop(0); // 返回内容页顶部
  }
  ionScroll() {
    // getScrollElement():获取实际滚动发生的元素
    const scrollElement: Promise<HTMLElement> = this.elContent.getScrollElement();
    scrollElement.then((Element) => {
      // console.log("当前滚动距离:",Element.scrollTop );
      if (Element.scrollTop > 110) { // 设置当滚动条距离顶部的距离为110时返回顶部按钮显示
        this.renderer2.removeAttribute(this.elBackTop, 'hidden');
        this.renderer2.addClass(this.firstRow, 'firstRow_scroll_Top');
      } else if (Element.scrollTop === 0) { // 设置当滚动条距离顶部的距离为0时返回顶部按钮隐藏
        this.renderer2.setAttribute(this.elBackTop, 'hidden', 'true');
      } else if (Element.scrollTop < 110) {
        this.renderer2.removeClass(this.firstRow, 'firstRow_scroll_Top');
      }
    });
  }
  //#endregion
}

3.accountgrid.page.scss

// 圆角及背景颜色公用
.el_border_radiusAndbackcolor{
    border:1px solid gainsboro;
    border-radius: 5px;
    background-color: rgb(243, 242, 239);
    padding: 4%;
    height: 35px;
}
// ion-col标签自定义样式
.ion_col_self_css {
    align-self: center;
    text-align: right;
}
//奇数行样式
.grid_col_rgb_j{
    background-color: rgb(211, 242, 247);
    border: 1px solid rgb(167, 165, 165);
}
//偶数行样式
.grid_col_rgb_o{
    background-color: rgb(233, 230, 230);
    border: 1px solid rgb(167, 165, 165);
}
.grid_col_rgb_header{
    background-color: #1196EE;
    border: 1px solid rgb(165, 166, 167);
    text-align: center;
    color: white;
}
.grid_col_white{
    background-color: white;
    border: 1px solid rgb(167, 165, 165);
}

//Gird首行样式
.firstRow_scroll_Default{
    z-index: 999;//标签在最顶层
    width: 150%;
}
.firstRow_scroll_Top{
    position: fixed;//固定
    z-index: 999;//标签在最顶层
}

4.效果图 

Ionic实战二十一:树的集成及列表数据关联 文章目录1. 项目UI部分页面2.实际效果预览3.引入ztree4.页面布局5.页面引入6.页面树样式修改7.html页面中引入css及js文件 最近不太顺,投标了2个大项目都黄了,记录下其中一个之前没做过的内容点。 1. 项目UI部分页面 2.实际效果预览 由于项目黄了,仅做2页面当技术储备 3.引入ztree npm install @ztree/ztree_v3 4.页面布局 <ion-row> <ion-col col-4> < 阅读详情

相关推荐

Ionic框架下的移动应用开发项目:作业02

本文还有配套的精品资源,点击获取 简介:本文介绍了一个特定的编程作业——使用Ionic框架开发一个显示用户基本信息的移动应用。用户信息包括名字、城市和兴趣爱好,这项作业不仅涵盖前端界面设计和数据展示,还需要运用TypeScript编程、Angular组件化开发以及对Ionic框架的深入了解。通过这个作业,学生将学习如何构建一个跨平台的移动应用,并理解如何使用Web技术来实现...

weixin_42583683的博客 1820

ionic:在Ionic项目中使用ngx-datatable创建表格展示数据

想要在ionic中使用ngx-datatable插件展示表格,首先需要安装插件:npm install @swimlane/ngx-datatable 然后将这个插件的依赖导入到要使用这个插件所在的页面的module中: import{NgxDatatableModule}from'@swimlane/ngx-datatable' 接下来,在页面上取到后台传给我们的表格的数据,比如我这...

灿灿大王搭建的黄金屋 3699

使用Ionic 3和Angular 5构建Web应用实战:模仿京东商城

Ionic 3包含了许多预制的UI组件,如按钮、卡片、列表和滑动菜单等。开发者可以通过这些组件快速搭建出美观的界面。比如使用组件,就可以创建一个符合Ionic风格的按钮,其代码示例如下:这行代码展示了如何在Ionic中创建一个可点击的按钮,当点击时执行doAction函数。

weixin_35238815的博客 989

ionic实现表格头部和第一列固定且都可滚动

由于移动端屏幕有限,在展示多行多列的表格类型数据时,需要做成可滚动的来展示,但是滚动的时候,我们需要表头和第一列固定,以便在滚动的时候,可以看到该行、该列所属。

lishihong 1万+

ionic 导出excel实现方案

轻松完美的实现ionic导出excel表格,真实项目代码案例,代码简洁,轻松完美的实现ionic导出excel表格,真实项目代码案例轻松完美的实现ionic导出excel表格,真实项目代码案例

ionic2中使用echarts3创建图表

ionic2中使用echarts的完整实例代码

ionic 表格

一, npm install @swimlane/ngx-datatable 二, app.module.ts import { NgxDatatableModule } from '@swimlane/ngx-datatable'; imports: [ … NgxDatatableModule, ], app.component.html <div>...

樊建华 1622

ionic grid(栅格)九宫格制作详解

主要为大家详细介绍了ionic grid九宫格的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

ionic5 表单相关组件(单行文本框、开关、多选按钮、下拉框、多行文本框)

这里写目录标题准备新建页面跳转创建表单信息的JSON字符串页面创建list页面展示peopleInfo单行文本框ion-input开关ion-toggle单选按钮组 ion-radio-group 、ion-radio多选按钮ion-checkbox下拉框ion-select、ion-select-option多行文本框 ion-textarea 准备 新建页面 首先,我们项目中新建页面form如下: 跳转 接下来我们在tab1中新建按钮跳转只form页面 <ion-button [routerLi

u010574271的博客 1471

脑机接口(BCI)从原理到开发实战 10|脑控外设:用脑电波控制机械臂/游戏

摘要: 脑机接口(BCI)的“最后一公里”是将分类结果转化为实际动作的关键环节。本文介绍如何通过指令映射、硬件通信和执行反馈实现脑控外设,包括离散/连续控制策略、防抖处理及串口/蓝牙通信方法。通过两个实战案例(运动想象控制机械臂抓取、P300/SSVEP控制游戏)和完整项目(OpenBCI控制小车),演示了从分类标签到设备动作的完整流程,重点涵盖指令生成算法(多数投票)、Python与Arduino的串口通信集成,为BCI系统落地提供实用解决方案。(149字)

小明的博客 763

病理WSI配准库valis教程

病理WSI配准库valis教程

azrealq的博客 2598

Ionic开发实战

折磨的两个月!Ionic从零单排,到项目发布!遇到了很多问题但都一一解决了,此篇文章留作记录。

陈峰的专栏 11万+

Android Display Graphics #1 整体框架介绍一

手机屏上显示的内容,2D或3D ,如果是 3D 的,不管是 App 还是游戏,或者简单的图片界面,底层都是通过 GPU、 通过 OpenGL(ES)绘制出来的。是Java层的一个类,提供了一系列API,使用这些API可以实现各种的产品经理要求的效果。显示的不同阶段对这块内存的叫法不同,在上层可以是Window、ANnativeWindow、Surface、SurfaceView、layer、buffer,这些本质上没啥区别,可以广泛意义上理解为用于显示内容的那块内存,只不过各个阶段的操作接口不同。

oDwyane03的博客 1385

ionic

Ionic介绍* = 官网地址 - Ionic官网 - Ionic中文网 首先要认识Ionic框架? IONIC 是目前最有潜力的一款 HTML5 手机应用开发框架。通过 SASS 构建应用程序,它提供了很多 UI 组件来帮助开发者开发强大的应用。 它使用 JavaScript MVVM 框架和 AngularJS 来增强应用。提供数据的双向绑定,使用它成为 Web ...

Primise7的博客 547

手把手教你理解特斯拉Model 3的域控制器架构:RBCM如何成为“多面手”?

本文深入解析特斯拉Model 3的域控制器架构,重点介绍右车身域控制器(RBCM)如何整合车身电子系统功能。RBCM作为多任务处理中枢,管理空调系统、尾部电气设备和超声波雷达等关键功能,展现了特斯拉在汽车电子架构上的创新设计。文章详细探讨了RBCM的硬件架构、功能版图及信号网络,揭示其如何通过高性能MCU和智能开关技术实现功能集中与效率提升。

weixin_30919429的博客 378

嘉立创EDA报错:元件引脚与焊盘未对应报错解决记录

原件引脚与焊盘未对应报错解决方法,一文总结!

2303_77013775的博客 1万+

Ionic移动端开发

本篇主要针对移动端App开发进行介绍。目前市场上主流的移动端APP分为三种:原生APP、Web APP(即HTML5)和混合APP三种,相对应的也就是原生开发、H5开发和混合开发。 1. 原生开发 开发方式:使用设备厂商提供的原生语言和工具进行开发,比如Android的Kotlin, Java;iOS的Swift, Objective-C等。 开发工具:Xcode (iOS),Android Studio (Android)。 优点是:性能最佳,与系统的集成度高,能充分利用硬件资源(如GPS、摄像

m0_61619549的博客 2061

从寄存器配置到G值:一份给STM32开发者的SC7A20加速度数据换算保姆级指南

本文为STM32开发者提供SC7A20三轴加速度传感器的数据换算保姆级指南,详细解析从寄存器配置到G值转换的全过程。涵盖量程选择、输出值换算原理及优化代码实现,帮助开发者快速掌握加速度数据的物理意义转换技巧,提升运动感知系统开发效率。

weixin_29172963的博客 172

Ionic 3 实战开发指南

课程简介 在移动开发领域,各种不同的框架和工具可谓是百花齐放。从 Android 和 iOS 的原生应用,到 Xamarin 和 RubyMotion 这样的跨平台解决方案,再到新兴的 React Native 等,开发人员可以根据自己的技能来选择最适合的解决方案。 此达人课将介绍移动开发中的一个重要框架——基于 Apache Cordova 的混合移动应用开发方案 Ionic。Ionic 的优势...

GitChat 6772

Word标题样式基准重置:彻底解决重新打开后自动缩进问题

本文深入剖析了Word文档中标题样式在重新打开后自动缩进问题的根源,并提供了两种根治方案。通过调整标题样式基准或将其设为“无样式”,并配合检查修正多级列表设置,可彻底解决这一常见格式顽疾,确保文档格式的稳定性与专业性。

weixin_29266647的博客 526

QKD(量子密钥分发)

量子密钥分发(Quantum Key Distribution,QKD)是一种基于量子力学原理的安全通信协议,它允许两个用户通过不安全的通信信道创建并共享一个安全的密钥。这个密钥随后可以用于加密和解密信息,确保通信的机密性。QKD的核心原理是量子不可克隆定理和量子测量的不确定性。

qq_40844444的博客 2896

Web开发学习笔记:Ionic4与SQLite数据库交互

以下代码使用IDE:vscode; 语言模式:TypeScript 1.使用命令创建一个service ionic g serviceDBManager 创建成功后目录中会有两个文件 2.在app.module.ts中添加对DBManagerService类的引用同时在providers中添加DBManagerService类 3.在DBManagerService类中编...

JustWantToFly的博客 1132

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Ionic,AngularJS学习笔记

1.ionic是一个强大的混合式/hybrid_HTML5移动开发框架,特点是使用标准的HTML,CSS,JavaScript,开发跨平台的原生App应用; 2.ionic基于AngularJS基础框架开发,遵循AngularJS的框架约束; 3.ionic.js实现的指令基本覆盖了移动端开发所需,将移动端开发常见的UI组件抽象成AngularJS指令,便于在HTML开发中快速使用; 4.ioni...

NCUT-LB 826

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Ionic 4 启动应用教程:基于 Ionic Themes 的免费示例应用

Ionic 4 启动应用教程:基于 Ionic Themes 的免费示例应用 项目介绍 本项目是基于Ionic 4的一款免费入门级应用示例,由Ionic Themes提供。它旨在引导开发者如何使用Ionic 4框架创建一个简单的应用程序,该应用包含了列表、表单及导航功能。通过这个教程,你可以快速理解从Ionic 3到Ionic 4之间的主要变化,并掌握新版本的核心概念。 项目快速启动 要快速启动此...

gitblog_00115的博客 908

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Ionic 7跨端开发实战:Web Components+Capacitor构建稳定离线App

跨端开发框架是现代前端工程化的核心基础设施,其本质是在Web标准(HTML/CSS/JS)之上构建可复用、可维护、可交付的多平台应用层。Ionic作为深耕Web Components与原生桥接十年的成熟方案,以标准化Custom Elements为基石,通过Capacitor实现TypeScript优先的原生能力调用,兼顾开发效率与运行稳定性。它不追求像素级原生体验,而专注表单交互、离线缓存、路由管理等高频业务路径的确定性保障,特别适合企业内部应用、MVP验证、PWA增强及内容型跨平台项目。本文基于Ioni

weixin_33947521的博客 330

Ionic:从入门到实战的详细教程

Ionic 是一个开源的移动应用开发框架,允许开发者使用 HTML、CSS 和 JavaScript 构建跨平台的移动应用。它结合了 Web 技术和原生功能,支持多种前端框架(如 Angular、React 和 Vue.js),并提供了一套丰富的 UI 组件。Ionic 是一个强大的跨平台开发框架,通过 Web 技术(HTML、CSS、JavaScript)和原生功能的结合,开发者可以快速构建高性能的移动应用。通过本文的介绍,希望读者能够快速掌握 Ionic 的开发流程,并在实际项目中应用其强大的功能。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1577
上一篇: 开发学习笔记:ionic 钩子事件 / ionic页面加载方法
下一篇: C#开发学习笔记:GridView利用正则表达式排除数值列末尾多余的0
JustWantToFly
博客等级 码龄10年 42粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值