微信小程序-语法

第一节、动态style和class

style:

<view style="color:{{color}}" style="border:1rpx red solid;width:{{w}}rpx;height:{{h}}rpx">
    沙皮狗
</view>
    data: {
        w:400,
        h:300,
        color:"red",

class:

<view class=" {{xx}}">
    沙皮狗
</view>
    data: {        
        xx:"co",
   .co{
      color: blue;
  }

第二节、条件渲染

wx:if="{{}}"
wx:else
wx:elif="{{}}"

demo:

>=10 ,则吃饭
钱 7-10 ,则吃面
钱 <7  ,则不吃



<text wx:if="{{m>=10}}">吃饭</text>
<text wx:elif="{{m>=7}}">吃面</text>
<text wx:else="">不吃</text>

第三节、block

这是一个虚拟标签,等价于vue中的template

wx:for 和 wx:if的连用

<view wx:for="{{stus}}" wx:key="id" wx:if="{{item.age>=20}}">
    {{item.name}}
</view>

第四节、事件

分类:

1 冒泡型事件类型    tap	手指触摸后马上离开
2 非冒泡型事件类型   input  focus  blur

注册事件

<标签  bind类型="函数"   ---》允许冒泡
<标签  catch类型="函数"  --->阻止冒泡

注意:函数后不能添加(),也就意味着以后传参不是通过()来传递的

函数位置:js 文件中,和data并列,直接写即可(没有methods)


demo:点击按钮,打印

wxml
<button bindtap="ff">按钮</button>

js:
	data:{},
    ff(){
        console.log("123123");
    },


event对象(传参问题)

​ 作用:用来接受参数等

函数的第一个形参默认就是event对象
    ff(e){
        console.log(e);
    },

方式1: data-自定义属性

<button bindtap="ff" data-name="张三" data-age="16"  data-obj="{{user}}">按钮</button>
    ff(e){
        console.log(e.currentTarget.dataset);
    },

方式2:mark:自定义属性

<button bindtap="ff" mark:name="张三" mark:age="16"  mark:obj="{{user}}">按钮</button>

ff(e){
	console.log(e.mark);
},

第五节、关于操作data数据的问题

获取:

this.data.属性

赋值

错误做法:this.data.属性="",页面无法检测到数据改变,导致无法重写渲染
正确做法:
		this.setData({
			属性:})
如果只想改变对象中的某些属性:
	官方:
   
        this.setData({
            ['对象.属性']:})
	民间:
		 this.setData({
            user:{
                ...this.data.user,
                username:"bbb"
            }
        })

第六节、实时监听文本框输入的值

方式1:采用bindinput事件 (万精油)

<input  type="text" bindinput="input" style="border:1rpx red solid"/>
    input(e){
         console.log(e.detail.value);
    },

方式2:简易双向绑定 (只能用于基本类型)

<input  type="text"   model:value="{{value}}" style="border:1rpx red solid"/>

    data: {
        value:"",
        
注意:
	1 model:value是固定语法
	2 {{value}}是自定义的data变量
	3 只支持基本数据类型

第七节、自定义组件

小程序项目组成分为了页面和组件

如果区分是不是一个页面:

1 就是看app.json中的路由是否有配置(pages),如果在pages下路径就一定是页面

2 查看js文件,如果是page()开头就是页面,如果是Component开头就是组件

新建自定义组件步骤

1 在项目根目录下新建components

2 在components新建组件目录(比如page)

3 选中page目录右键选择新建component(组件名字匹配目录名,也就是page)

4 把组件引入到页面中渲染(页面能够引入组件,组件是无法引入页面,组件可以引入组件)

找到页面.json:

{   
    //使用组件
    "usingComponents": {
        "组件名":"/components/xxxxx"

    }
}

5 最后把配置的组件名当成标签使用到对应的页面中即可

注意:子组件的函数是放在js文件中的methods中,而页面的函数是和data同级别的

补充页面级别的json配置(可以配置当前页面的窗口样式)

{   
   
    "usingComponents": {
        "mypage":"/components/page/page"

    },

    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#667788",
    "navigationBarTitleText": "首页",
    "navigationBarTextStyle": "white",
    "navigationStyle":"default"
}

第八节、自定义组件通信

依然保留单项数据流的特点

1 父组件更新之后,子组件会自动同步
2 子组件无法直接修改父组件传递过来的参数

1 子接受父传过来的参数(父传子)

fu:
<mypage title="{{name}}" />

zi:
   {{title}}
   
    properties: {
        title:{
            //String、Number、Array、Object
            type:String,
            value:'蜗牛',       
        }
    },
    js获取:
    this.properties.title
    this.data.title
    

2 父页面/组件 接受子组件传递过来的参数 (自定义事件)

fu

语法: bind:自定义事件名="函数"
<view>
    <mypage title="{{name}}"  bind:change="change"/>
</view>

函数(e){
	通过e.detail子组件传递过来的参数 
}

zi

 语法: this.triggerEvent("匹配父亲的自定义事件名",参数)
 this.triggerEvent("change","赵六")

第九节、生命周期钩子函数

1 应用级别的钩子函数

  onLaunch() {
   	//第一次打开程序时会触发 (执行一次)
   	//以后用于自动登录
  },
  onShow(){
  	//进入小程序都会触发 (可能执行多次)
  },
  onHide(){
  	//切出小程序都会触发 (可能执行多次)
  },

重点:

  onLaunch() {
   	//第一次打开程序时会触发 (执行一次)
   	//以后用于自动登录
  },

2 页面级别的钩子函数

onLoad(options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

重点:

 onLoad(options) {
 		//options可以接受上一个页面传递过来的参数
        console.log("进入页面时触发,只会触发一次");
    },
 onShow() {
        console.log("每次进入页面时都会触发,可能会触发多次");
    },
    //下拉刷新
       onPullDownRefresh() {

    },
    //触底分页
        onReachBottom() {

    },

3 组件级别的钩子函数

生命周期	参数	描述	最低版本
created	无	在组件实例刚刚被创建时执行	1.6.3
attached	无	在组件实例进入页面节点树时执行	1.6.3
ready	无	在组件在视图层布局完成后执行	1.6.3
moved	无	在组件实例被移动到节点树另一个位置时执行	1.6.3
detached	无	在组件实例被从页面节点树移除时执行	1.6.3
error	Object Error	每当组件方法抛出错误时执行	2.4.1

Component({
  lifetimes: {
    attached: function() {
      // 在组件实例进入页面节点树时执行
    },
    detached: function() {
      // 在组件实例被从页面节点树移除时执行
    },
  },
 
})


重点:

created(){}

4 组件所在页面的钩子函数

生命周期	参数	描述	最低版本
show	无	组件所在的页面被展示时执行	2.2.3
hide	无	组件所在的页面被隐藏时执行	2.2.3
resize	Object Size	组件所在的页面尺寸变化时执行	2.4.0

Component({
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

第十节、异步请求

wx.request({
	url:"",
	data:{传参},
	header:{
		
	},
	method:"post/get",
	success(res){
		
	},
	fail(res){
	
	},
	complete(){
		//无论成功还是失败都会进入该回调函数
	}
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值