HarmonyOS 鸿蒙Next系统应用开发之JS实现一个简单的List

HarmonyOS 鸿蒙Next系统应用开发之JS实现一个简单的List 在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld。

今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个简单的List界面。

说起来这是一个很简单的功能实现,不过其中也有不少的坑。

首先要说明的是,鸿蒙应用开发里有Java UI框架和JS UI框架,如果要谈界面实现的简单方便,当然是选用JS UI框架了。

大概的浏览了一下JS API的文档,

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-overview-0000001056361791

我发现鸿蒙应用开发里面的JS限制还是比较多的,和原生的JS差别也很大,不过毕竟是在别人的地盘下开发,还是要入乡随俗。

鸿蒙应用的JS UI框架已经有了很多的组件,满足一般的开发是没问题的,也提供了自定义组件。

当然也提供了底层接口,可以获取硬件信息,地理位置等等。

在今天的开发里,我最关心的就是List组件和数据获取的方式。

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-container-list-0000000000611496

按照文档里提供的范例,我把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方法:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-network-data-request-0000000000626077

根据文档的说法,我们首先要在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"
    }],

这个权限声明部分其实还有很多需要增加的属性,可以参考:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-guidelines-0000000000029886

这个其实跟安卓开发差不多。

不过这个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里的数据是可以导致重新渲染界面的。

15 回复

现在js应用还是不能热更新吗??大哥你开发的时候是,反复重启吗

更多关于HarmonyOS 鸿蒙Next系统应用开发之JS实现一个简单的List的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢楼主提点呀

你们太厉害啦,我可不行

太惭愧了,还是学下好了

厉害,写的太好了

这么夸我,我都不好意思了

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

来来来,凑个热闹  

我也要向你学习

棒棒哒,来吧,围观

写的真挺好

这不是我发在51cto,知乎和微信上的文章吗?

居然被引用了。。。

看来是被官方认可的精品

在HarmonyOS(鸿蒙Next)系统中,使用JS开发一个简单的List可以通过<list>组件实现。以下是一个基本的示例代码:

// index.js
export default {
    data: {
        items: [
            { name: 'Item 1' },
            { name: 'Item 2' },
            { name: 'Item 3' }
        ]
    }
}
<!-- index.hml -->
<list>
    <list-item for="{{items}}" tid="name">
        <text>{{$item.name}}</text>
    </list-item>
</list>

在这个示例中,<list>组件用于创建一个列表,<list-item>用于定义列表项。for属性用于循环遍历data中的items数组,tid属性用于指定唯一标识符。{{$item.name}}用于显示每个列表项的名称。

在HarmonyOS鸿蒙Next系统中,使用JS开发一个简单的List可以通过<list>组件实现。首先,在hml文件中定义<list>,并在<list-item>中添加内容。然后,在js文件中定义数据源,并通过for循环动态渲染列表项。示例代码如下:

<list>
  <list-item for="{{items}}" tid="id">
    <text>{{$item.name}}</text>
  </list-item>
</list>
export default {
  data: {
    items: [
      { id: 1, name: 'Item 1' },
      { id: 2, name: 'Item 2' }
    ]
  }
}

这样即可实现一个简单的列表展示。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!