鸿蒙系统应用开发之JS实现一个简单的List
在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld。
今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个简单的List界面。
说起来这是一个很简单的功能实现,不过其中也有不少的坑。
首先要说明的是,鸿蒙应用开发里有Java UI框架和JS UI框架,如果要谈界面实现的简单方便,当然是选用JS UI框架了。
大概的浏览了一下JS API的文档,
我发现鸿蒙应用开发里面的JS限制还是比较多的,和原生的JS差别也很大,不过毕竟是在别人的地盘下开发,还是要入乡随俗。
鸿蒙应用的JS UI框架已经有了很多的组件,满足一般的开发是没问题的,也提供了自定义组件。
当然也提供了底层接口,可以获取硬件信息,地理位置等等。
在今天的开发里,我最关心的就是List组件和数据获取的方式。
按照文档里提供的范例,我把index.html改成了如下代码
<!-- index.hml -->
<div class="container">
<list>
<list-item for="{{data.items}}">
<text class="item">{{$item.name}}</text>
</list-item>
</list>
</div>
在index.js里我把data部分改成了如下:
data: {
data:{
items:[
{ name:"a" },
{ name:"b" }
]
},
},
运行以后的效果如下:

那么现在的问题就是如何获取数据了。
在官方文档里我查到了fetch方法:
根据文档的说法,我们首先要在index.js里导入fecth:
import fetch from '@system.fetch';
然后文档里说了这个方法需要ohos.permission.INTERNET权限,于是我就去config.json里增加了权限。
在\DevEcoStudioProjects\MyApplication1\entry\src\main\config.json里找到module,在这个属性下面增加:
"reqPermissions": [ { "name": "ohos.permission.INTERNET" }],
这个权限声明部分其实还有很多需要增加的属性,可以参考:
这个其实跟安卓开发差不多。
不过这个fetch方法跟原生JS的fetch不太一样
fetch.fetch({
url:"https://www.douban.com/j/app/radio/channels",
responseType: 'json',
success: function(response) {
console.info('response data:' + response.data);
console.info('response data:' + JSON.parse(response.data).channels);
},
fail: function(data, code) {
console.info('fail callback');
},
})
这个responseType据说设置成json就会返回对象,不过我测试下来并不会。
虽然你看我写出来一副了然于胸的样子,其实权限部分和这个fetch方法我一开始并不知道。
本来我以为可以直接用fetch,结果发现并不可以,后来突然想起来官方文档里号称用的是ES6语法,我就试了试import,误打误撞才发现原来需要自己导入fetch。
这时候我才去文档里找到了相关的说明,才知道居然是fetch.fetch。
一开始也还是无法返回数据,我还以为华为的远端调试不支持访问外网,再看文档才注意到权限。
设置了权限也无法访问,又会去看文档才注意到默认用https,要用http还需要另外设置。
这些都修改好了,就非常顺利地返回了数据。
接下来的问题就是如何把数据渲染到界面上。
我把index.js里的onInit做了如下修改:
onInit() {
let me = this;
fetch.fetch({
url:"https://www.douban.com/j/app/radio/channels",
responseType: 'json',
success: function(response) {
console.info('response data:' + response.data);
me.data.items = JSON.parse(response.data).channels;
},
fail: function(data, code) {
console.info('fail callback');
},
})
}
重新运行之后(如果本地调试,是可以热更新的,远程调试需要重新运行):

所以说,直接修改data里的数据是可以导致重新渲染界面的。
作者:WebCodingTech
想了解更多内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com#bky
鸿蒙系统应用开发之JS实现一个简单的List的更多相关文章
- 用JS做一个简单的电商产品放大镜功能
使用js制作一个简单的产品放大图 购物网站的产品页经常会放有一个产品展示图区.该图区有一个功能就是产品图的放大功能,移动左侧的焦点区域,可以放大细节部分观看,详情如下图.实现该功能的方法也非常简单. ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- JS实现一个简单的计算器
使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...
- js实现一个简单钟表动画(javascript+html5 canvas)
第一次在博客园注册发博.有一次去人家单位开标,看到开标网站上有个钟表动画,一时兴起,就写了个简单的钟表动画. 用js和html5 canvas对象实现一个简单钟表程序 主要用到的就是h5的canvas ...
- php+js实现一个简单的用户管理系统
php + js 实现一个简单的用户管理系统 说实话,我对PHP是抵触的,但是我们的WEB课程刚好学的就是这个,不得已看了看,下面是用PHP实现的一个简单的用户管理系统. 我们首先来看一下目录结构 a ...
- JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。
编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...
- 学习用node.js建立一个简单的web服务器
一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...
- JS写一个简单日历
JS写一个日历,配合jQuery操作DOM <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- Three.js构造一个简单的房间
主要研究three.js在3D场景中基本使用:画一个简单的房子.房子上画门和玻璃.房间内放一个床.定义鼠标事件可以移动场景.动画的使用等. 1.Three.js画的一个简单的房子,模拟地板以及四堵墙 ...
随机推荐
- Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)
滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动.拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等.这些需要针对控件元素的滑动操作,或者 ...
- C++冷知识(1)
func()等价于func(void) 也就是说在C++中,参数列表为空意味着不接受任何参数.之所以要注意这一点是因为在C语言中,参数列表为空意味着参数不确定.两者的语义是有巨大差别的,作为学了C再学 ...
- java9第5篇-Collection集合类的增强与优化
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- 说明资源路径位置类型无法解析The type javax.servlet.http.HttpServletResponse cannot be resolved.
导入dispatch项目后报错: 解决办法:在项目上单击鼠标右键> Add Libraries 选择 Server Runtime,下一步 选中Apache Tomcat7 完成 切换标 ...
- python numpy输出排名
python numpy排序后输出排名 问题: 假设某班的成绩为: 姓名 成绩 名次 小红 95 小黑 67 小白 58 小绿 82 小蓝 76 小橙 79 小可爱 99 请根据表格,输出对应的名次 ...
- Shell脚本学习指南笔记(一)
脚本语言通常是解释型的,这类程序的运行.是由解释器读入程序代码,并将其转换成内部的形式, 再执行,解释器本身是一般的编译型程序. 第一行的开头处使用#!这两个字符,当内核扫描到改行的其余部分,看是否存 ...
- vscode自定义插件安装位置
vscode的插件默认安装位置在: C:\Users\用户名\.vscode\extensions 如果不想将插件安装在C盘,可以自定义一个目标位置存储,使用如下: 右键快捷方式,在原本的目标后加入- ...
- jQuery load() 中文乱码
1.使用editplus创建了demo.txt (ANSI保存的), $("#div1").load("demo.txt");//div显示中文乱码---> ...
- Django( 学习第三部 Django的url路由层)
目录 url路由层 路由匹配(有名分组与无名分组) 反向解析 路由分发 名称空间(了解) Django版本区别 url 路由匹配 注意事项: url方法,第一个参数是正则表达式,只要第一个参数能够匹配 ...
- pyqt设置窗口图标
import sys from PyQt5.QtWidgets import QMainWindow,QApplication from PyQt5.QtGui import QIcon ''' 窗口 ...