easycom自动导入自定义组件

目录下 components / MyItem /MyItem.vue

<template>
<view>
<view class="item">
(。・∀・)ノ゙嗨
</view>
</view>
</template>
<style lang="scss">
.item{
width: 200rpx;
height:200rpx;
background-color: orange;
}
</style>

使用

<template>
<view>
<MyItem></MyItem>
<!-- 其他东西 -->
</view>
</template>

props父向子组件传值

父传子

<!-- 组件 Components/MyItem.vue-->
<view class="pubTitle">
<view class="big">
{{title}}
</view>
<view class="small">
{{subtitle}}
</view>
<view class="line">
</view>
</view>
</template>
<script>
export default {
props:["title","subtitle"],
data() {
return {
};
}
}
</script>
<style lang="scss">
.pubTitle{
padding: 60rpx 30rpx;
text-align: center;
.big{
font-size: 50rpx;
font-weight: 600;
color: #333;
}
.small{
font-size: 28rpx;
color: #888;
}
.line{
display: inline-block;
width: 80rpx;
height: 8rpx;
background-color: #1AA034;
border-radius: 10rpx;
}
}
</style>

使用组件方

 <MyItem title="首页" subtitle="index Page"></MyItem>
<!-- 驼峰写法也好使 -->
<My-item title="首页" subtitle="index Page"></My-item>

绑定动态值及数据类型默认值

动态传值的使用组件方

<template>
<view>
<MyItem :title="text" :subtitle="subtitle"></MyItem>
</view>
</template>
<script>
export default {
data(){
return{
text:"(。・∀・)ノ゙嗨",
subtitle:"┗|`O′|┛ 嗷~~"
};
}
}
</script>

数据默认值的组件方

<template>
<view class="pubTitle">
<view class="time">
{{time}}
</view>
<view class="big">
{{title}}
</view>
<view class="small">
{{subtitle}}
</view>
<view class="list">
{{list}}
</view>
<view class="obj">
{{obj}}
</view>
<view class="line">
</view>
</view>
</template> <script>
export default {
// props:["title","subtitle"],
props:{
title:{
type: String,
default:"默认标题"
},
subtitle:{
type: String,
default:"默认副标题"
},
// 父组件传值时。除string都要v-bind
time:{
type: Number,
default:Date.now()
},
// 数组和对象都得 default() return
list:{
type:Array,
default(){
return [1,2,3]
}
},
obj:{
type:Object,
default(){
return {
a:1,
b:2
}
}
}
},
data() {
return { };
}
}
</script>

emit子向父组件传值

子组件

<template>
<view>
<view class="" >
<input type="text" placeholder="请输入"
@input="inputsomeThing"
>
</view>
</view>
</template> <script>
export default {
methods:{
inputsomeThing(e){
// this.$emit(事件名,值)
// 只传单值
// this.$emit("myenv", {
// e.detail.value,
// ) // 传对象(多值)
this.$emit("myenv", {
value:e.detail.value,
time:Date.now()
})
}
}
}
</script>

父组件

<template>
<view class="box">
<myEvent @myenv="myenv"></myEvent>
</view>
</template>
<script>
export default {
data(){
return{
};
},
methods:{
myenv(e){
console.log(e)
}
}
}
</script>

native 修饰符与父子间通信传值

父组件

<template>
<view class="box">
<myEvent
@myenv="myenv"
@click.native="onCLick"
></myEvent>
<!--
就是你写 @click,它会以为我们自定义了个事件
所以后面加个native,说明这是原生的,不是在父子组件通信的
-->
<button @click="turnON">开启</button>
<!-- 核心还是通过props传数据给子组件,只是结合了使用修饰符让原生事件在子组件标签上生效而已-->
<!-- 数据向下走,方法向上走 -->
<mypop :state="state"
@fade="fade"
></mypop>
</view>
</template>
<!-- <box-icon name='home-alt-2' flip='horizontal' color='#a09898' ></box-icon> -->
<script>
export default {
data(){
return{
state:false
};
},
methods:{
myenv(e){
console.log(e)
},
onCLick(){
console.log("(。・∀・)ノ゙嗨")
},
turnON(){
this.state = true
},
fade(e){
this.state = e
}
}
}
</script>

子组件 myEvent

<template>
<view>
<view class="" >
<input type="text" placeholder="请输入"
@input="inputsomeThing"
>
</view>
</view>
</template>
<script>
export default {
data() {
return { };
},
methods:{
// e.detail.value
inputsomeThing(e){
// 事件名,使用时前面加on
// 只传单值
// this.$emit("myenv", {
// e.detail.value,
// ) // 传多值
this.$emit("myenv", {
value:e.detail.value,
time:Date.now()
})
}
}
}
</script>

子组件 mypop

<template>
<view>
<view class="pop"
:style="{display: state? 'block':'none'}"
>
</view>
<button size="mini" @click="fade">关闭</button>
<view class="">
(。・∀・)ノ゙嗨
</view>
</view>
</template>
<script>
export default {
name:"mypop",
props:{
state:{
type:Boolean,
default:false
}
},
data() {
return {
};
},
methods:{
fade(){
this.$emit("fade",false)
}
}
}
</script>
<style lang="scss">
.pop{
height: 300rpx;
width: 300rpx;
background-color: cornflowerblue;
}
</style>

sync修饰符以及update的实现原理

两种方法对比

不使用sync

父组件

<template>
<view class="box">
<button @click="turnON">开启</button>
<mypop :state="mystate"
@update:state = "aaa"
></mypop>
</view>
</template>
<script>
export default {
data(){
return{
mystate:false
};
},
methods:{
turnON(){
this.mystate = true
},
aaa(e){
this.mystate = e
}
}
}
</script>

子组件

<template>
<view>
<view class="pop"
:style="{display: state? 'block':'none'}"
>
</view>
<button size="mini" @click="fade">关闭</button>
<view class="">
(。・∀・)ノ゙嗨
</view>
</view>
</template> <script>
export default {
name:"mypop",
props:{
state:{
type:Boolean,
default:false
}
},
data() {
return {
};
},
methods:{
fade(){
this.$emit("update:state",false)
}
}
}
</script> <style lang="scss">
.pop{
height: 300rpx;
width: 300rpx;
background-color: cornflowerblue;
}
</style>

使用sync

父组件

<template>
<view class="box">
<button @click="turnON">开启</button>
<!-- 使用.sync可以修改父子局传来的值但无法触发自定义事件 -->
<!-- 如果选的时vue3的话,父组件需要写成“v-model:state” -->
<mypop :state.sync="mystate" ></mypop>
</view>
</template>
<!-- <box-icon name='home-alt-2' flip='horizontal' color='#a09898' ></box-icon> -->
<script>
export default {
data(){
return{
mystate:false
};
},
methods:{
turnON(){
this.mystate = true
}
}
}
</script>

子组件

<template>
<view>
<view class="pop"
:style="{display: state? 'block':'none'}"
>
</view>
<button size="mini" @click="fade">关闭</button>
<view class="">
(。・∀・)ノ゙嗨
</view>
</view>
</template>
<script>
export default {
name:"mypop",
props:{
state:{
type:Boolean,
default:false
}
},
data() {
return {
};
},
methods:{
fade(){
this.$emit("update:state",false)
}
}
}
</script>
<style lang="scss">
.pop{
height: 300rpx;
width: 300rpx;
background-color: cornflowerblue;
}
</style>

vue中的生命周期和小程序周期的对比

VUE的生命周期 https://www.jianshu.com/p/4f8daeafe58f



普通vue页面

<template>
<view class="box">
</view>
</template>
<script>
export default {
data(){
return{ };
},
methods:{
interval(){
console.log("自定义函数")
}
},
created(){
this.interval()
//网络请求
console.log("这是 index created")
}, mounted(){
//数据渲染
console.log("index mounted")
}
}
</script>

APP.vue页面

也可以使用 mounted ,created 都会自动转化。但既然它本身使用了onLaunch这些东西,就用就行,不用往上添加了。

<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script> <style>
/*每个页面公共css */
</style>

uniapp学习(二)的更多相关文章

  1. uni-app学习(二)

    1. uni-app学习(二) 1.1. 好用css记录 一定透明度的背景色background: rgba(255,255,255,.6); 1.2. 好用的代码段 store(用户登录) expo ...

  2. uni-app学习(五)好用的插件3

    1. uni-app学习(五)好用的插件3 1.1. 分享推广页面 分享推广页面,分享第三方.保存二维码.复制推广地址 模板地址 示例 这个用到的几率还是蛮大的,可以直接拿来修改下用 1.2. 教育A ...

  3. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  4. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  5. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  6. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  7. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  8. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  9. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  10. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

随机推荐

  1. AndroidBanner - ViewPager 03

    AndroidBanner - ViewPager 03 上一篇文章,描述了如何实现自动轮播的,以及手指触摸的时候停止轮播,抬起继续轮播,其实还遗留了一些问题: 当banner不可见的时候,也需要停止 ...

  2. ModelAndView方法的返回值类型

    一.ModelAndView @RequestMapping("/selectById") public ModelAndView queryById(Integer id){ M ...

  3. git撤销某一次commit提交

    一.使用git rebase命令 如果您想彻底删除 Git 中的某次提交的内容,可以使用 git rebase 命令并将该提交删除. 以下是删除 Git 提交内容的步骤: 找到要删除的提交的哈希值.可 ...

  4. 涨姿势了,有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元 ...

  5. C# 如何设计一个好用的日志库?【架构篇】

    〇.前言 相信你在实际工作期间经常遇到或听到这样的说法:   "我现在加一下日志,等会儿你再操作下."   "只有在程序出问题以后才会知道打一个好的日志有多么重要.&qu ...

  6. 18-html压缩

    const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...

  7. 文盘Rust -- rust连接oss

    作者:京东科技 贾世闻 对象存储是云的基础组件之一,各大云厂商都有相关产品.这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧. 基本连接 我们以 aws 对象存储的sdk为例来说说基 ...

  8. 【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题

    问题描述 当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件. 以编程方式来读取数据并写入 ...

  9. 【重学C++】04 | 说透C++右值引用(上)

    文章首发 [重学C++]04 | 说透C++右值引用(上) 引言 大家好,我是只讲技术干货的会玩code,今天是[重学C++]的第四讲,在前面<03 | 手撸C++智能指针实战教程>中,我 ...

  10. springboot 分析源码欢迎页和图标-> thymeleaf模板引擎常用语法->扩展

    欢迎页: icon: 注意点:  thymeleaf模板引擎 1.使用thymeleaf模板引擎前要导入对应依赖包 2.阅读源码: 根据源码说明我们可以将html文件放置在templates目录下,然 ...