飞道的博客

HaaS UI小程序解决方案基础教学 之 搭建第一个UI页面

249人阅读  评论(0)

名词解释

AliOS Things: 阿里云智能IoT团队自研的物联网操作系统,目前已获得国家

HaaS:全称是Hardware as a Service,阿里云智能IoT团队基于AliOS Things系统推出的硬件即服务

HaaS UI:全称是Hardware as a Service User Interface,是源自AliOS Things操作系统上的一套应用&图形解决方案,支持C/C++和 JS两种开发语言

 

1、HaaS UI简介

HaaS UI是在AliOS Things操作系统上搭建的带屏应用框架,支持使用前端JS语言开发UI。HaaS UI的前端应用框架是基于Vue框架(V2.6版本)扩展的,利用前端技术在一定的限制子集(具体支持的基础组件和样式更详细的内容可参考后续文章)内来搭建页面。

前面文章已介绍过HaaS UI的开发环境搭建,本文主要介绍一下如何使用Vue以及一些基础组件来开发一个简单的页面。

 

2、Vue框架简介

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的应用提供驱动。

也可以参考查阅Vue官网更详细的介绍:https://cn.vuejs.org/

入门:https://www.runoob.com/vue2/vue-tutorial.html

 

3、内置基础组件

HaaS UI框架已经内置支持的基础组件包括以下这些:

组件

描述

<scroller>

页面滚动组件

<div>

通用容器通用容器

<text>

文本组件

<image>

图片组件

<slider>

轮播组件

<input>

输入框组件

<seekbar>

用于滑动进度条的组件

<canvas>

画布组件

<modal>

浮窗组件

相关组件的详细介绍大家可以扫描文章最后的二维码进群咨询,下面就看一下如何基于这些基础组件搭建一个页面。

 

4、使用Vue开发一个HaaS UI页面

Vue的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。一个Vue组件或页面的基本结构,一般分为三个部分:HTML模板、js脚本和样式。按照这样的结构,先来搭第一个HelloWorld页面。

 

4.1、第一个页面


  
  1. <template>
  2. <!-- HTML模板 -->
  3. <div> <text class="text">{{message}} </text> </div>
  4. </template>
  5. <script>
  6. // js脚本
  7. export default {
  8. name: "demo",
  9. data() {
  10. return {
  11. message: 'hello world'
  12. };
  13. }
  14. }
  15. </script>
  16. <style scoped>
  17. /* 样式 */
  18. .text {
  19. font-size: 50px;
  20. color: red;
  21. }
  22. </style>

搭建完用模拟器运行效果如下:

这样我们已经成功搭建了第一个HaaS UI页面。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。那如何确认响应式呢?我们只需在js里修改一下this.message,就能看到页面上相应的更新了。

 

4.2、响应式更新


  
  1. <template>
  2. <!-- HTML模板 -->
  3. <div> <text @click="click" class="text">{{message}} </text> </div>
  4. </template>
  5. <script>
  6. // js脚本
  7. export default {
  8. name: "demo",
  9. data() {
  10. return {
  11. message: 'hello world'
  12. };
  13. },
  14. methods: {
  15. click() {
  16. // 修改this.message,界面自动更新
  17. this.message = 'text clicked.'
  18. }
  19. }
  20. }
  21. </script>
  22. <style scoped>
  23. /* 样式 */
  24. .text {
  25. font-size: 50px;
  26. color: red;
  27. }
  28. </style>

 

4.3、进阶

第一个页面搭建完成了,我们尝试用基础组件搭建更丰富的UI,以下的例子基本囊括了HaaS UI内置的基础组件。另外,如何基于基础组件扩展定制化的前端组件,会有后续文章再介绍。


  
  1. <template>
  2. <scroller>
  3. <div style="padding:30px">
  4. <div class="list-item">
  5. <text class="list-item-title">Flex布局 </text>
  6. <div class="flex-container">
  7. <div v-for="i of 7" class="flex-container-item" :key="i">
  8. <text>{{i}} </text>
  9. </div>
  10. </div>
  11. </div>
  12. <div class="list-item">
  13. <text class="list-item-title">image组件 </text>
  14. <div style="flex-direction: row;">
  15. <image style="width:100px;height:100px; margin:3px"
  16. src= "https://gd2.alicdn.com/bao/uploaded/i2/T14H1LFwBcXXXXXXXX_!!0-item_pic.jpg"/>
  17. <image style="width:100px;height:100px; margin-right:5px"
  18. src= "https://gd1.alicdn.com/bao/uploaded/i1/TB1PXJCJFXXXXciXFXXXXXXXXXX_!!0-item_pic.jpg"/>
  19. <image style="width:100px;height:100px; margin-right:5px"
  20. src= "https://gd3.alicdn.com/bao/uploaded/i3/TB1x6hYLXXXXXazXVXXXXXXXXXX_!!0-item_pic.jpg"/>
  21. </div>
  22. </div>
  23. <div class="list-item">
  24. <text class="list-item-title">slider组件 </text>
  25. <slider style="width:400px;height:150px" showIndicators="true" infinite="true">
  26. <div v-for="i of 3" :key="i" :style="{'background-color':RGBS[(i-1)%3],'align-items':'center'}">
  27. <text>{{i}} </text>
  28. </div>
  29. </slider>
  30. </div>
  31. <div class="list-item">
  32. <text class="list-item-title">seekbar组件 </text>
  33. <seekbar style="width: 300px;" handleColor="#108ee9"
  34. handleInnerColor= "#fff" handleSize= "20" trackSize= "10" />
  35. </div>
  36. <div class="list-item">
  37. <div style="flex-direction: row;">
  38. <text class="list-item-title">canvas组件 </text>
  39. <div class="button" @click="drawCanvas">
  40. <text style="font-size:16px;">点我画圆 </text>
  41. </div>
  42. </div>
  43. <canvas ref="canvas" width="300" height="300" style="background-color:#ccc;margin-top:5px;"/>
  44. </div>
  45. <div class="list-item">
  46. <text class="list-item-title" @click="toggleModal">Modal组件(点我弹出) </text>
  47. <Modal ref="modal" :system="true">
  48. <div class="modal-content">
  49. <text style="text-align:center;">this is a system modal. </text>
  50. <div class="button" @click="toggleModal"> <text style="font-size:16px;">close </text> </div>
  51. </div>
  52. </Modal>
  53. </div>
  54. <div class="list-item">
  55. <text class="list-item-title">Buttons </text>
  56. <div style="flex-direction: row;">
  57. <div class="button" @click="buttonClick(1)"> <text style="font-size:16px;">Button1 </text> </div>
  58. <div class="button" @click="buttonClick(2)"> <text style="font-size:16px;">Button2 </text> </div>
  59. <div class="button" @click="buttonClick(3)"> <text style="font-size:16px;">Button3 </text> </div>
  60. </div>
  61. </div>
  62. </div>
  63. </scroller>
  64. </template>
  65. <script>
  66. import Modal from "../packages/modal/index.vue";
  67. export default {
  68. components: { Modal },
  69. data(){
  70. return {
  71. RGBS: [ '#f00', '#0f0', '#00f'],
  72. };
  73. },
  74. mounted() {
  75. this.drawCanvas();
  76. },
  77. methods: {
  78. buttonClick(i) {
  79. let modal = $falcon.jsapi.modal;
  80. modal && modal.toast({
  81. content: `Button${i} clicked.`,
  82. duration: 1000,
  83. });
  84. },
  85. drawCanvas() {
  86. let ctx = createCanvasContext( this.$refs.canvas);
  87. ctx.fillStyle = this.RGBS[ Math.floor( Math.random()* 3)];
  88. ctx.beginPath();
  89. ctx.arc( Math.floor( Math.random()* 300), Math.floor( Math.random()* 300),
  90. Math.floor(( Math.random()* 20)+ 10), 0, 3.15* 2);
  91. ctx.fill();
  92. },
  93. toggleModal() {
  94. this.$refs.modal.toggle();
  95. },
  96. },
  97. }
  98. </script>
  99. <style scoped>
  100. .list-item {
  101. flex-direction: column;
  102. margin-bottom: 30px;
  103. }
  104. .list-item-title {
  105. font-size: 30px;
  106. color: black;
  107. margin-bottom: 5px;
  108. }
  109. .flex-container {
  110. flex-direction: row;
  111. flex-wrap: wrap;
  112. align-items: center;
  113. justify-content: center;
  114. background-color: #888;
  115. width: 600px;
  116. }
  117. .flex-container-item {
  118. width: 100px;
  119. height: 100px;
  120. background-color: red;
  121. margin: 5px;
  122. align-items: center;
  123. justify-content: center;
  124. }
  125. .button {
  126. margin-right: 20px;
  127. padding: 10px;
  128. background-color: #888;
  129. border-radius: 10px;
  130. align-items: center;
  131. justify-content: center;
  132. }
  133. .button :active {
  134. background-color: #aaa;
  135. }
  136. .modal-content {
  137. width: 290px;
  138. height: 150px;
  139. padding: 10px;
  140. background-color: white;
  141. border-radius: 20px;
  142. align-items: center;
  143. justify-content: center;
  144. }
  145. </style>

以上页面基本囊括了HaaS UI内置的基础组件,在模拟器上的效果如下:

 

5、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

 


转载:https://blog.csdn.net/HaaSTech/article/details/112674174
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场