先看一下目录结构
学习一下:static 目录下的 js 文件不会被编译,如果里面有 es6 的代码,不经过转换直接运行,在手机设备上会报错。css、less/scss 等资源同样不要放在 static 目录下,建议这些公用的资源放在 common 目录下。HbuilderX 1.9.0+ 支持在根目录创建 ext.json sitemap.json 文件。
开发主要知识
/common/用来存放定义的公共文件,如通用的 css 样式和宏定义/components/用来存放一些自定义的组件,比如项目中用到的自定义导航栏,搜索栏,购物车加减数量,地址选择器,选择框,弹框等/config/存在 app 的一些配置,比如测试和生产环境配置,状态,路由的配置
条件编译如下:
/*H5平台登录按钮显示红色,微信小程序登录按钮显示蓝色*/
button {
/* #ifdef H5 */
background:red;
/* #endif */
/* #ifdef MP-WEIXIN */
background:blue;
/* #endif */
}
复制代码
实例:
<template>
<view class="content">
<view class="uni-list">
<view class="uni-list-cell" hover-class="uni-list-cell-hover" v-for="(item,index) in news" :key="index" @tap="opennews" :data-postid="item.post_id">
<view class="uni-media-list">
<image class="uni-media-list-logo" :src="item.author_avatar"></image>
<view class="uni-media-list-body">
<view class="uni-media-list-text-top">{{item.title}}</view>
<view class="uni-media-list-text-bottom uni-ellipsis">{{item.created_at}}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
news: []
};
},
onLoad:function(){
uni.request({
url: 'https://unidemo.dcloud.net.cn/api/news',
method: 'GET',
data: {},
success: res => {
this.news = res.data;
},
fail: () => {},
complete: () => {}
});
},
methods:{
opennews(e){
uni.navigateTo({
url: '../news/news?postid='+e.currentTarget.dataset.postid
});
}
}
}
</script>
<style>
.uni-media-list-body{height: auto;}
.uni-media-list-text-top{line-height: 1.6em;}
</style>
复制代码
上述代码解释:v-for 表示要循环的语句,其中的 news 是在 js 部分中的 data 定义的属性,表示新闻列表。
v-for 中的 item 表示一个列表项,也就是一个新闻;index 表示列表的下标。
@tap 表示绑定点击事件。因为是在移动端,还是不要写 @click 了。
click 事件在移动端会有 300ms 的延迟:data-postid 表示绑定一个动态的数据,而 postid 表示这个动态的数据属性是这个名字。如果想直接输出数据中的内容,通过{{}}两对大括号将数据内容包裹在里面即可。
例如{{item.title}}视频中特别强调了声明 data 属性时要注意,必须声明为返回一个初始数据对象的函数。只需要更新最新版本的 HBuilder X 新建页面的时候就会自动生成。
编写 js 代码的时候,编辑器会自动用 eslint 对代码进行检查。可以通过工具-插件配置-eslint-vue 查看和修改配置项。onLoad 是页面的生命周期。uni-app 完整支持 Vue 实例的生命周期,同时还支持应用生命周期及页面生命周期
评论