小程序组件之传值和用户信息获取

130 阅读3分钟

一:小程序组件

1:小程序组件建立

第一步创建组件:

创建一个组件(子组件,文件夹+小的文件夹+选中右击建立compinents页面 然后出现4个样式页面),然后在pages的其中一个页面(父组件)的json中引入组件 image.png

第二步使用组件:

使用子组件,子组件的文件名就是pages的wxml中的标签名进行使用

image.png

第三步基本方法操作:1:父传子

父组件做的操作:第一步:通过标签属性的方式来传递数据 将获取的数组的item赋值给一个变量 然后子组件通过[properties]接收,子组件通过触发事件向页面传参 列如:

 父:<block wx:for="{{arr}}" wx:key="index">   
  <swiper-item>
   <Compont rItem="{{item}}" bindtap="go" data-url="          {{item.path}}">
  </Compont>
  
子:
  <view class="swiper-item ">
  <image class="active" data-url="{{rItem.path}}" 
  bindtap="getUrl" 
  src="{{rItem.image}}"></image>
  </view>
 子.js:
  properties: {
rItem:{
  type:Object,
  value:[]
},
 },

image.png

image.png 子组件需要做的操作: 第一步:子组件的js中在properties中先接收对象 这个对象名就是父组件传过来的 然后写表面接收的数据类型

image.png 子组件展示效果:

image.png

总结:父传子:@1 先在pages的页面中先将页面的基本样式写出来,然后在将wxml和wxss中的样式剪切到子组件中;@2 在页面中将子组件的文件名作为标签使用。用block无意义的占位符将for循环写在上面,下面的子组件的标签中将循环的item赋值给一个变量,页面的js中将数组的信息写入;@3 子组件:将之前cv过来的wxml中,把这个变量写在页面中,并在js的properties中先接收对象 这个对象名就是父组件传过来的 然后写表面接收的数据类型 基础的页面渲染就可以了

第三步基本方法操作:2:子传父

通过自定义事件绑定要传递的数据

  //this.triggerEvent("父组件自定义事件的名称",要传递的参数)
   this.triggerEvent("itemChange",{index});

image.png

image.png

image.png

image.png

父组件要使用子组件的话,首先在json中引入,然后在页面中用子组件标签<子组件名></子组件名>

父组件向子组件传参通过自己页面内的子标签传递,通过子组件的传递的方法名进行绑定接收的方法

子组件向父组件传参通过绑定方法传递,通过properties进行接收。

还有一个点,如果将父组件的写在子组件标签内容的元素显示出来呢,这时候就用到slot

二:slot[插槽]

slot 标签 其实就是一个占位符 插槽,写在子组件内用来接收父组件通过标签传递过来的
等到父组件调用子组件的时候,再传递标签过来最终这些被传递的标签,就会替换 slot 插槽的位置

子组件wxml,增加一个slot

 父:<CompA msg="{{msg}}" bindhandler="handler">
<view style="font-size:30px;" slot="s1">张国荣--沉默是金</view>
<view style="font-size:30px;" slot="s2">张学友--吻别</view>
</CompA>
子:<slot name="s1"></slot>
 <view bindtap="childChange">{{msg}}</view>
 <!-- 插槽里面显示的是组件标签插入的内容 -->
 <slot name="s2"></slot>

三:获取用户信息:

     页面的wxml:  <button bindtap="getUserInfo" 
     plain type="primary">获取用户信息     </button>
       <image src="{{touxiang}}"></image>
        <view>{{nichen}}</view>
     页面的js:data: {
    touxiang:'',
    nichen:''
},
getUserInfo: function () {
    wx.getUserProfile({
        desc: '亲爱的宝贝:',
        success: (res) => {
            console.log(res)
            let {userInfo:{avatarUrl,nickName}} = res;
            this.setData({
                nichen:nickName,
                touxiang:avatarUrl
            })
        }
    })
},

想要一进入页面就显示头像和昵称需要使用open-type标签

 <open-data type="userAvatarUrl"></open-data>
 <open-data type="userNickName"></open-data>
 <!-- 使用语言 -->
<open-data type="userLanguage"></open-data>

四:获取地址

 wxml:    <button bindtap="getAdress">获取地址信息</button>
      <view>{{addressStr}}</view>
       
 js:      getAdress() {
    /* 获取经纬度实时地址 */
    wx.getLocation({
        type: 'wgs84',
        success:(res)=>{
            console.log(res)
            this.setData({
                addressStr:'经度:'+res.longitude+' 纬度:'+res.latitude
            })
        }
    })
    /* 选择收货地址 */
    // wx.chooseAddress({
    //     success:({cityName,countyName,detailInfo})=>{
    //         this.setData({
    //             addressStr:cityName+countyName+detailInfo
    //         })
    //     }
    // })
    /* 选择地址 */
    // wx.chooseLocation({
    //     success:({address,name})=>{
    //        this.setData({
    //            addressStr:address+name
    //        })
    //     },
    //     fail:(err)=>{
    //         wx.showToast({
    //           title: '确认是否授权',
    //           icon:"error"
    //         })
    //     },
    //     // complete:(res)=>{
    //     //     console.log(res)
    //     // }
    // })
},