前端开发_快应用开发

news/2024/4/20 20:36:19/文章来源:https://blog.csdn.net/qq_43260366/article/details/129123101

目录

      • 快应用官网
      • 真机调试
      • 组件
        • 组件嵌套问题
        • tab组件
        • list组件
        • web组件
      • css 样式问题
        • [1]选择器
        • [2]盒模型
        • [3]样式布局-弹性布局
        • [4-1]样式切换 - 类名的动态切换
        • [4-2] 样式切换 - 行内样式动态切换
        • [5]background
        • [6]overflow
        • [7]border-radius
        • [8]盒子阴影
        • [9] 单位
      • 系统接口
        • [1] 检查某app是否在手机上安装
        • [2] 下载应用
        • [3] 检查当前是否有桌面应用
        • [4] 添加桌面应用
        • [5]数据存储
        • [6]弹框
        • [7] 接口
      • 公共对象
        • global对象
        • $app
          • 退出快应用
        • $element
          • 获取指定element元素
      • manifest配置文件
        • config - 系统配置信息
          • designWidth - 项目配置基准宽度
          • data - 全局数据对象
        • router - 配置路由
          • entry
          • pages
      • 问题
        • 问题1-IDE打开是英文

  • 点击其他地方关闭弹框
  • 全局变量 blobal
  • Scheme协议

快应用官网

快应用官网

真机调试

在开发快应用时,需要进行真机调试,因为在模拟器上很多效果都不正确,所以需要以真机为主。

  • 方法1: 远程预览
    • 直接微信扫(远程预览)二维码进入调试模式
  • 方法2: 使用调试器调试
    • [1]在快应用调试器下载地址下载快应用调试器 与 快应用预览版;
    • [2] 点击如下二维码icon打开二维码并扫描二维码可正常在手机上进行调试
      在这里插入图片描述
  • 方法2的优势是在运行的时候若是逻辑错误可以看到运行报错,有助于我们解决问题。
    比如说我在逻辑代码中使用了window对象进行事件监听,在远程预览时功能不能正常运行,但是定位不到问题的原因,使用调试器进行调试可以看到错误,能快速定位问题---- 没有window对象。

组件

组件嵌套问题

  • [1] 文本必须包裹在 text组件或span组件中,否则不显示;
  • [2] span必须作为text/a/span组件的子组件,否则不显示;

tab组件

tab组件中的tab-content中的数据不支持动态增加或减少!如果要减少页面,需要先销毁掉,重新用新的实例展示数据 ===> 快应用提供了if命令,if为false时,页面不显示,并且dom节点也会移除。

<tab if='bol'><tab-bar></tab-bar><tab-content></tab-content>
</tab>

但是这样将会导致每次切换tab数据加载时 tab-bar的滚动条都会滚动到初始位置(最左边),而且数据加载中tab-bar数据也会暂时消失 ===> 用户体验感不好;
我们可以只使用tab-bar来显示滚动条的tab数据,底部content内容使用普通组件div进行显示!

list组件

list-item — type属性必填 不然list不会滚动

web组件

由于快应用开发存在很多样式兼容问题,开发过程不是很顺利,我们可以使用其他框架开发web页面,然后通过web组件引入其他线上页面

<web src='http://baidu.com'></web>

css 样式问题

快应用中对于很多css样式都不兼容, 我们按照平常的习惯进行样式布局,在真机调试的时候发现样式是错乱的!


下面针对一些不兼容样式进行说明~

[1]选择器

  • 支持标签选择器、类选择器、id选择器,暂不支持其它选择器;
  • 继承:不支持样式继承;

[2]盒模型

快应用布局框架使用 border-box 模型,暂不支持 content-box 模型与手动指定 box-sizing 属性。

[3]样式布局-弹性布局

在快应用中很多组件默认采用的都是 弹性布局的方式进行布局,div组件是比较常用的弹性布局方式布局的元素。

  • 弹性布局不可以取消 ! ===> 在快应用中display只有flex与none取值情况,
      display: flex ; // 弹性布局display: none; //  消失
    
  • 若是不想子元素在一行排列 可以使用修改主轴方向
      flex-direction: column;
    
  • 注意:在弹性布局中 ===> 若是子元素的高度/宽度总和大于父元素的高度或宽度,不会出现滚动条,而是子元素的宽/高 收缩。

[4-1]样式切换 - 类名的动态切换

在很多情况下,我们需要通过动态切换类型来改变元素的的样式,在快应用中注意,切换类名时,类名必须在目标元素上,不然没效果!
比如设置在父元素上

.active{text{color: red; // 没效果}
}

我给text的父元素添加active类名然后修改text元素文本的颜色,但是发现没有效果;但是把类名动态添加在text标签上就发现样式可以正常切换了。

.active{color:red;
}

[4-2] 样式切换 - 行内样式动态切换

行内样式不支持动态编写 ----> 可以使用computed或methods

 <div style='{{background-image:url(imgurl)}}' class='www'></div>
  private:{imgurl: 'https://martin-upload.wcar.net.cn/web/2021/11/6bbf95698459f15b0050cb0d8e9e3484.png'}

上述代码不能正常显示图片,个人猜测是因为识别不出变量imgurl,若是想样式中的数据动态切换,可以采用computed与methods

  <div style="{{returnStatusImage()}}"  class='www'></div>
private: {text: '快应用是什么?',status:0
},
returnStatusImage() {switch (this.status) {case 0:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/11/6bbf95698459f15b0050cb0d8e9e3484.png)'break;case 1:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/11/07167f84c6dbf2679a6b1744acdd6ae9.png)'break;case 2:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/11/743cbd9439d241cb6c8af9aeb85b312e.png)' break;case 3:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/12/5459fe6f0978ca211dc7034b903547c2.png)'break;case -1:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/12/5459fe6f0978ca211dc7034b903547c2.png)'break;case 4:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2022/02/9ff11fe02d56737ed45dec1ff626a194.jpg)'break;default:return 'background-image:url(https://martin-upload.wcar.net.cn/web/2021/11/6bbf95698459f15b0050cb0d8e9e3484.png)'}},

[5]background

  • 在快应用中background属性的作用是用来设置渐变色的,不能作为背景的复合属性。
    • 起作用
      background: linear-gradient(53deg, #F0E6D5 0%, #F0DFC3 100%);
      
    • 无作用
      background: red;
      
    • 若是想设置颜色使用background-color
        background-color:red;
      
  • span组件添加背景色不起作用!若是想要设置背景色不要使用span组件

[6]overflow

在快应用中overflow可接受的属性值如下

overflow: visible; // 显示
overflow: hidden; // 隐藏

因此没有办法设置元素显示滚动条等

[7]border-radius

在快应用中border-radius只接受一个值作为属性值

  • 若是设置2/3/4个值,则会报出警告
    border-radius:30px 20px 10px 0; // 四个圆角都会设置为30px
    
    不支持px 20px 10px 0作为单位,在编译时会将第一个值后面的值看作为单位
  • 设置4个一样的值
    border-radius:30px 20px 10px 0; // 四个圆角都会设置为30px
    
  • 若是想四个圆角弧度不一致
    border-top-left-radius:30px; // 左上
    border-top-right-radius:30px; // 右上
    border-bottom-left-radius:30px; //  左下
    border-bottom-right-radius:30px; // 右下
    

[8]盒子阴影

快应用中不支持盒子阴影。

[9] 单位

快应用中支持 px % dp单位;但是%单位在真机中显示不对!

系统接口

在项目中使用到的接口都需要在配置文件manifest.json中声明,不然会报如下警告

[WARN] 请在 manifest.json 文件里声明项目代码中用到的接口: system.storage, service.account, system.package, system.webview

[1] 检查某app是否在手机上安装

  • 官方文档:官方文档
  • 接口: system.package的hasInstalled方法
  • 作用:检查某app是否在已经在手机上安装
  • 使用
    • [1] 接口声明- 在配置文件manifest.json中声明
      "features": [{"name": "system.package" },
      ]
      
    • [2] 在需要的地方导入并使用
        import pkg from '@system.package'
      
      pkg.hasInstalled({package: 'app包名',success: function(data) {console.log(`handling success: ${data.result}`)// result为true表示app已安装// result为false表示app未安装},fail: function(data, code) {console.log(`handling fail, code = ${code}`)}
      })
      

[2] 下载应用

  • 官方文档:官方文档
  • 接口: system.package的install方法
  • 作用:下载某app
  • 使用
    • [1] 接口声明- 在配置文件manifest.json中声明
      "features": [{"name": "system.package" },
      ]
      
    • [2] 在需要的地方导入并使用
      import pkg from '@system.package'
      
      pkg.install({package: '应用包名',success: function(data) {console.log(`handling success: ${data.result}`)// result:true 下载成功// result: false 下载失败},fail: function(data, code) {console.log(`handling fail, code = ${code}`)}
      })
      

[3] 检查当前是否有桌面应用

  • 官方文档:官方文档
  • 接口: system.shortcut的hasInstalled方法
  • 作用:检查某app当前是否有桌面应用
  • 使用
    • [1] 接口声明- 在配置文件manifest.json中声明
      "features": [{"name": "system.shortcut" },
      ]
      
    • [2] 在需要的地方导入并使用
      import shortcut from '@system.shortcut'
      
      shortcut.hasInstalled({success: function(res) {// res 为true表示已创建图标// res weifalse表示未创建图标}
      })
      

[4] 添加桌面应用

  • 官方文档:官方文档
  • 接口: system.shortcut的install方法
  • 作用:为某app添加桌面应用
  • 使用
    • [1] 接口声明- 在配置文件manifest.json中声明
      "features": [{"name": "system.shortcut" },
      ]
      
    • [2] 在需要的地方导入并使用
      import shortcut from '@system.shortcut'
      
      shortcut.install({success: function() {console.log('handling success') // 创建成功},fail: function(data, code) {// 创建失败,请在设置中开启创建桌面应用权限console.log(`handling fail, code = ${code}, errorMsg=${data}`)}
      })
      

[5]数据存储

  • 官方文档:官方文档

[6]弹框

  • 官方文档:官方文档
  • 弹出框一共有三种
    • toast提示框
    • dialog对话框
    • 列表框

[7] 接口

  • 官方文档:官方文档
  • 请求封装
    import { fetch } from "@system.fetch";
    import { getStorage, setStorage } from './storage'
    const api = 'xxx' const hasToken = async () => {const token = await getStorage('token')return !!token
    }// 将与后端约定的数据统一添加在请求头中
    const getHeaders = async () => {const token = await getStorage('token')return {token,....}
    }export const httpGet = async (url, data = {}, header = {}) => {await hasToken()const headers = await getHeaders()return new Promise((resolve, reject) => {fetch({url: api + url,data,method: 'GET',responseType: 'json',header: {...headers,...header},success(data) {resolve(data.data)},fail(err) {reject(err)}})})
    }export const httpPost = async (url, data = {}, header = {}) => {await hasToken()const headers = await getHeaders()return new Promise((resolve, reject) => {fetch({url: api + url,data,method: 'POST',responseType: 'json',header: {...header,...headers},success(data) {if (data.data.status === 1004) {router.replace({uri: '/pages/Login'})} else {resolve(data.data)}},fail(err) {reject(err)}})})
    }export default {httpGet,httpPost
    }

公共对象

global对象

在快应用中global对象可以直接使用,我们可以将封装的公共方法添加在global对象上(类似于将封装的公共方法添加在vue实例化对象上)

$app

退出快应用
this.$app.exit() // 退出开应用,结束应用生命周期

$element

获取指定element元素
  • 获取指定 id 的组件 dom 对象,如果没有指定 id,则返回根组件 dom 对象用法
    this. $element('id名')
    
  • 获取元素的宽高
     element.getBoundingClientRect({success: data =>{// data中包含元素的宽高 ,left\right\bottom\top}})
    

manifest配置文件

manifest配置文件

config - 系统配置信息

designWidth - 项目配置基准宽度

与传统 web 页面不同,px是相对于项目配置基准宽度的单位,已经适配了移动端屏幕,其原理类似于rem。

设计稿1px / 设计稿基准宽度 = 框架样式1px / 项目配置基准宽度

  • 语法
    "config":{"designWidth": 750
    }
    
    若是不设置,默认值为750
  • 举例说明
    在这里插入图片描述
data - 全局数据对象

属性名不能以$_开头,在页面中可通过 this 进行访问;如果全局数据属性与页面的数据属性重名,则页面初始化时,全局数据会覆盖页面中对应的属性值

router - 配置路由

文件的目录结构如下:

src
  — pages
         — Demo
                 — index.ux
         — DemoDetail
                 — index.ux
          — Test
                 — test.ux
                 — test2.ux

在这里插入图片描述

entry

entry的属性值必须为pages中的一个。

pages
pages:{"页面名称":{"conponent": ' 文件夹名',"path": "路径名"}
}
  • 注意事项1: 页面配置列表(key值为指定页面名称(页面对应的文件夹目录),value为页面详细配置; key值唯一)

    • 若是同一文件夹下存在多个文件,此时不能为该文件下的多个文件进行路由匹配

       "pages/Test": {"component": "test","path": "/test1"},"pages/Test": {"component": "test2","path": "/test2"}
      

      我想为同一文件夹下的文件匹配多个路由,此时会报错 Duplicate object key(重复配置)

      因此不要为同一文件夹的文件配置路由

    • 通过路由的路径可以看出,(在没有添加path属性的情况下)路径只到指定的文件夹而不包含文件名,因此即使是component属性值不同路由的路径也是相同的!

       "pages/Test": {"component": "test"}
      

      这个配置之后的路径是’pages/Test’

       "pages/Test": {"component": "test2"}
      

      这个配置之后的路径也是’pages/Test’

  • 注意事项2: 若是在定义单个路由信息时,存在path属性,属性值前面一定要加/表示当前在src文件夹下。

    • 在定义单个路由信息时,若是没有添加对应的path属性时,页面名称就是对应的路径名

      "pages": {"pages/DemoDetail": {"component": "index"
      }
      

      当url为’/pages/DemoDetail’就会跳转到该页面了,此时location.href的值为

      http://localhost:8083/preview/pages/DemoDetail/

    • 若是添加了path属性,页面的路径将会以path的属性值为准

      "pages/DemoDetail": {"component": "index","path": "/detail"}
      

      此时当url为’detail’或’/detail’时都会跳转到该页面,此时location.href的值为

      http://localhost:8083/preview/detail/

      此时注意path属性值前面一定要加/, 不然就会匹配不到对应的页面

      "pages/DemoDetail": {"component": "index","path": "detail"}
      

      此时当当url为’detail’或’/detail’时会报错 404

      http://localhost:8083/preview/detail is not found

问题

问题1-IDE打开是英文

第一次打开时显示为英文是因为配置还没有加载好,关闭之后重新打开显示的就是中文了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74808.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis五种数据结构

redis五种数据结构1. redis 其他相关1.1 redis 的安装1.2 redis 的持久化1.3 redis 配置文件2. redis 常见命令2.1 key2.2 设置 key 的生存时间或过期时间3. redis的5种常见的数据结构3.1 String3.2 list3.3 hash3.4 set3.5 zset&#xff08;SortedSet&#xff08;有序集合&…

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…

《爆肝整理》保姆级系列教程python接口自动化(二十四)--unittest断言——中(详解)

简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言&#xff0c;这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例&#xff0c;设计了 2 个用例&#xff0c;一个是查询北京的天气&#xff0c;一个是查询 南京为例&#xf…

继电器的工作原理、构成和功能介绍

随着电力应用的不断发展&#xff0c;电气设备已经深入到我们的日常生活中&#xff0c;电气自动化技术大量使用在电力系统和生产型企业中&#xff0c;人们在享受电带来方便的同时要注意用电保护。继电器就是为了保护电路而生的&#xff0c;可以提高电路可靠性&#xff0c;保障用…

RabbitMQ实现死信队列

目录死信队列是什么怎样实现一个死信队列说明实现过程导入依赖添加配置编写mq配置类添加业务队列的消费者添加死信队列的消费者添加消息发送者添加消息测试类测试死信队列的应用场景总结死信队列是什么 “死信”是RabbitMQ中的一种消息机制&#xff0c;当你在消费消息时&#…

wafw00f 防火墙探测

kali机器自带防火墙探测工具wafw00&#xff0c;它可以通过发送正常以及不正常甚至包含恶意代码的HTTP请求&#xff0c;来探测网站是否存在防火墙&#xff0c;并识别防火墙的厂商及类型。安装&#xff1a;git clone https://github.com/EnableSecurity/wafw00f.git python setup…

Windows如何查看某个端口被占用的情况?

在工作中&#xff0c;有时会发现端口被占用的情况&#xff0c;导致软件报错或者服务无法启动等问题。在不知道具体哪个进程占用该端口号的情况下&#xff0c;我们可以用下面方法来查找。 举例&#xff1a;我现在发现8090端口被占用了&#xff0c;我现在需要找到并杀掉该进程。…

TCP状态转换

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP状态转换专栏&#xff1a;《Linux从小白到大神》《网络编程》 TCP状态转换示意图如下 针对上面的示…

高并发之读多写少的场景设计(用户中心)

用户中心是一个典型的读多写少系统&#xff0c;可以说我们大部分的系统都属于这种类型&#xff0c;而这类系统通过缓存就能获得很好的性能提升。并且在流量增大后&#xff0c;用户中心通常是系统改造中第一个要优化的模块&#xff0c;因为它常常和多个系统重度耦合&#xff0c;…

消息队列介绍和RabbitMQ的安装

1.消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在…

高阶人生从在职读研开始——中国社科院与美国杜兰大学金融管理硕士

说到学历&#xff0c;好多人都不太在意&#xff0c;感觉学历没什么用。等升职学历被卡时&#xff0c;等你想考公学历达不到时&#xff0c;当你想跳槽更大的平台时&#xff0c;学历会显得尤其重要。当机会来临时&#xff0c;我们应该做好全足的准备&#xff0c;而不是眼瞅着机会…

SpringBoot相关操作

01-今日内容 Spring概述、快速入门SpringBoot配置SpringBoot整合 02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中&#xff0c;金融信创赫然名列其中&#xff0c;成为最早践行信创理论与实操的行业之一。截止到目前&#xff0c;金融信创渗透率业已仅次于党政部门&#xff0c;位列“8”大重点行业之首。超快的发展速度&#xff0c;让金融信创较早的步入“买方市…

浅谈模型评估选择及重要性

作者&#xff1a;王同学 来源&#xff1a;投稿 编辑&#xff1a;学姐 模型评估作为机器学习领域一项不可分割的部分&#xff0c;却常常被大家忽略&#xff0c;其实在机器学习领域中重要的不仅仅是模型结构和参数量&#xff0c;对模型的评估也是至关重要的&#xff0c;只有选择那…

前端开发:JS的节流与防抖

前言 在前端实际开发中&#xff0c;有关JS原生的节流和防抖处理也是很重要的点&#xff0c;关于底层和原理的掌握使用&#xff0c;尤其是在性能优化方面甚为重要。作为前端开发的进阶内容&#xff0c;在实际开发过程中节流和防抖通常都是项目优化的必要手段&#xff0c;而且也是…

机器学习笔记之近似推断(二)推断的核心思想

机器学习笔记之近似推断——推断的核心思想引言回顾&#xff1a;推断的目的与困难推断的目的推断的困难推断的核心思想——优化引言 上一节介绍了从深度学习的角度介绍了推断&#xff0c;并介绍了推断的目的和困难。本节将继续介绍推断的核心思想。 回顾&#xff1a;推断的目…

写给交互设计新手的信息架构全方位指南

目录什么是信息架构&#xff1f;通用方法日常工作可以关注的大神常用工具相关书籍什么是信息架构&#xff1f;信息架构是一个比众多其他领域更难定义的领域。内容策划由内容策划师来完成&#xff0c;交互设计由设计师来完成&#xff0c;而信息架构的完成与它们不同&#xff0c;…

达梦数据库(DM8)集成使用 Geotools(27.2)

达梦数据库&#xff08;DM8&#xff09;集成使用 Geotools&#xff08;27.2&#xff09;系统环境版本达梦 8 集成 Geotools 环境安装达梦8&#xff0c;请参照项目 pom.xml 添加 geotools 配置项目 pom.xml 添加达梦数据库驱动包Geotools 使用示例Geotools 连接数据库Geotools 空…

CLion Remote Debug CrossCompile

CLion远程Docker调试ROS(交叉编译)的设置步骤 准备一个好用的docker&#xff0c;运行起来&#xff08;Docker Image一定可以跑cuda和图形界面的&#xff0c;否则启动不了CLion&#xff0c;可以不用浪费时间看本教程了&#xff09; 在docker镜像中配置好ssh和rsync&#xff0c;…

测量 R 代码运行时间的 5 种方法

简介 平常在撰写论文时&#xff0c;会需要比较算法之间的计算时间。本篇文章给出几种测量 R 代码运行时间的方法。本文是小编学习过程中的笔记&#xff0c;主要参考博客1&#xff0c;2。 1. 使用 Sys.time() 小编通常使用 Sys.time() 函数来计算时间。首先记录当前运行时刻&…