首页 > 其他分享 >#DAYU200#Ability入门

#DAYU200#Ability入门

时间:2022-10-08 12:01:20浏览次数:93  
标签:ets Ability featureAbility 入门 DAYU200 跳转 router 页面

坚果老师

Ability入门

Ability在英文中是能力的意思,在这里是指应用所具备能力的抽象,同时是应用程序的重要组成部分。一个应用可以包含一个或多个FA/PA,其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。

目前Ability框架模型具有两种形态。

  • 第一种形态为FA模型。支持API 8及其更早版本。
  • 第二种形态为Stage模型。从API 9开始支持。

这里我们就拿API 8及其更早版本中的FA来说。学习能够看得见的Ability内部的页面跳转和Ability之间的页面跳转。激发大家的学习兴趣。

先来预览一下今天的一个效果。

接下来,我们创建一个项目AbilityDemo

image-20220928103317273

等待依赖加载完成之后

先进行一个签名

image-20220928103551791

这个时候,就可以安装到dayu200上

接下来就到今天最关键的的学习环节了

1.Ability内页面跳转(不带参数)

  • 在eTS目录如下,pages目录下有index.ets和second.ets;

    image-20220928103945459

实现:

在index.ets中引入router模块;

import router from '@system.router';

@Entry
@Component
struct Index {
  @State message: string = 'Ability内页面跳转(不带参数)'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold).onClick(()=>{

          // 跳转按钮绑定onClick事件,点击时跳转到第二页
          router.push({uri:"pages/second"})
        })

      
      }
      .width('100%')
    }
    .height('100%')
  }
}

为按钮添加点击事件,点击后跳转到second页面,使用router.push实现跳转;

2.Ability内页面跳转(携带参数)

在eTS目录如下,pages目录下有index.ets和third.ets;

image-20220928114512094

我们这次用Navigator组件,来携带参数跳转

import router from '@system.router';

@Entry
@Component
struct Index {

  @State content: object = { name: '我是上一个页面携带的数据' }

  build() {
    Row() {
      Column() {
        Navigator({ target: 'pages/third', type: NavigationType.Push }) {
          Text("Ability内页面跳转(携带参数)").fontSize(20)
            .width('100%').textAlign(TextAlign.Center)
        }
        //跳转时要同时传递到目标页面的数据,可在目标页面使用router.getParams()获得。
        .params({ text: this.content })
      }
    }.width('100%').height('100%')

  }
}

Third.page

import router from '@system.router'

@Entry
@Component
struct Thrid {
  // 通过router接收上一个页面传递的参数
  // @ts-ignore
  @State text: any = router.getParams().text
  build() {
    Row() {
      Column() {
        Text(this.text['name'])
          .fontSize(50)
          .fontWeight(FontWeight.Bold).onClick(() => {
          router.back()
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

3.跳转到指定Ability首页

  • 新建Ability,名为SecondAbility,在ets目录下右键新建New->Ability->Empty Page Ability(eTS);

image-20220928114757789

目录如图所示:

image-20220928114918133

  1. 在MainAbility/pages/index.ets中引入featureAbility模块;

    import featureAbility from '@ohos.ability.featureAbility';
    
  2. 在MainAbility/pages/index.ets中添加按钮,并为按钮添加文本、样式和点击事件,点击后跳转到SecondAbility的index页面,通过featureAbility.startAbility实现,调用featureAbility.startAbility时,这里参数want里主要传递bundleName和abilityName;详情请参看启动本地PageAbility。点击按钮触发点击事件后会默认跳转到MainAbility2的index页面。

    import featureAbility from '@ohos.ability.featureAbility';
    Text("跳转到指定Ability首页")
              .fontSize(20)
              .fontWeight(FontWeight.Bold).onClick(() => {
              //启动Ability
              let str = {
                "want": {
                  //设备Id,本机默认为空
                  deviceId:"",
                  //app名称,在config.json的bundleName
                  bundleName:"com.jianguo.abilitydemo",
                  //页面名称,注意包名
                  abilityName:"com.jianguo.entry.SecondAbility"
    
                },
              };
              featureAbility.startAbility(str)
                .then((data) => {
                  console.info('Operation successful. Data: ' + JSON.stringify(data))
                }).catch((error) => {
                console.error('Operation failed. Cause: ' + JSON.stringify(error));
              })
            })
    

然后我对上面的参数做个说明

  • deviceId:进行说明本机默认为空,
  • bundleName:在 config.json 的 bundleName
  • abilityName:页面名称,注意包名

4.跳转到指定Ability指定页

  • 在名为SecondAbility中,新建second.ets

image-20220928133745162

import featureAbility from '@ohos.ability.featureAbility';
Text("跳转到指定Ability页面")
          .fontSize(20)
          .fontWeight(FontWeight.Bold).onClick(() => {
          //启动Ability
          let str = {
            "want": {
              //设备Id,本机默认为空
              deviceId:"",
              //app名称,在config.json的bundleName
              bundleName:"com.jianguo.abilitydemo",
              //页面名称,注意包名
              abilityName:"com.jianguo.abilitydemo.SecondAbility",
              parameters: {
                url: 'pages/second'
              }
            },
          };
          featureAbility.startAbility(str)
            .then((data) => {
              console.info('Operation successful. Data: ' + JSON.stringify(data))
            }).catch((error) => {
            console.error('Operation failed. Cause: ' + JSON.stringify(error));
          })
        })

路径src/main/ets/SecondAbility/pages/second.ets

import router from '@ohos.router';
@Entry
@Component
struct Second {
  @State message: string = '我是Ability的Second页面'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold).onClick(() => {
          router.back()
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

好的,通过今天的整理,我们把Ability相关的一些技术点也做了一些了解,学到了四个小知识点。

下一期的内容,我会带领大家实现远程FA的启动。

源码地址

坚果码云

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com/#bkwz

标签:ets,Ability,featureAbility,入门,DAYU200,跳转,router,页面
From: https://blog.51cto.com/harmonyos/5737159

相关文章

  • Beats 入门实战(1)--简介
    Beats是轻量级(资源高效,无依赖性,小型)和开放源代码日志发送程序的集合,这些日志发送程序充当安装在基础结构中不同服务器上的代理,用于收集日志或指标;本文主要介绍Beats的理......
  • spring boot集成redis基础入门
    redis支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储。可以进行master-slave模式的数据备份更多redis相关文档请查看redis官方文......
  • JavaWeb/JavaEE开发入门(概述-总纲)
    作为初学者的浅知薄见,漫谈概览.欢迎指正和交流.1.从SE到Web到EE开发刚入门Java开发的时候,即使对于计算机网络有所了解,但是对于从围绕JDK展开学习的JavaSE的过程......
  • 简单入门猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>voidmenu(){ printf("**********************************************\n"); printf("*** 1.开始游戏 ......
  • 前端三剑客快速入门(三)
    前言前端三剑客快速入门(一)前端三剑客快速入门(二)书接上文,重新排版了。CSSCSS定位基本属性:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • 【开悟篇】Java多线程之JUC从入门到精通
    1.多线程J.U.C1.1线程池1.1.1线程回顾1)回顾线程创建方式继承Thread实现Runnable2)线程的状态NEW:刚刚创建,没做任何操作Threadthread=newThread();System.out.println(......
  • 深入剖析 Kubernetes-1容器技术概念入门
    1从进程说开去1.1前言容器技术的兴起来源于PaaS技术的普及Docker公司发布的Docker项目具有里程碑式的意义Docker项目通过“容器镜像”,解决了应用打包这个根本性难题......
  • spring cloud config 入门
    简介Springcloudconfig分为两部分serverclientconfig-server配置服务端,服务管理配置信息config-client客户端,客户端调用server端暴露接口获取配置信息config-server......
  • java入门(1) 程序运行机制及运行过程
    首先我们来看一下java程序在底层是怎么工作的:JAVA有两种核心机制:Java虚拟机(JavaVirtualMachine):1、java虚拟机可以理解成一个以字节码为机器指令的CPU。2、对于不同的平台......
  • 入门神经网络-Python 实现(下)
    假设对BP的认识回顾紧接着上篇,整到了,MES的公式和代码的实现.\(MSE=\frac{1}{n}\sum\limits_{i=1}^n(y_i-\haty_i)^2\)n表示样本数,这......