收藏
回答

代码在pages页面中,能够正常显示,在components组件中,就不显示了?

如图,点击跳转到左侧导航栏页面,选中了之后点击确认,返回时,不显示,代码在pages页面时,能够正常显示选中的项。代码在components组件中时,不显示选中的项。这是什么问题?下面代码是一部分代码,更详细的见代码片段

<!--pages/jobs/add/add-position/add-position.wxml-->
<view class="add-position-group">
    <form bindsubmit="onSubmitEvent">
        <expectation></expectation> 
        <button form-type="submit" type="primary" class="sunbmit-btn">保存配置</button>
    </form>
</view>


// pages/jobs/add/add-position/add-position.js
const app = getApp();
const db = wx.cloud.database();
const _ = db.command;
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  async onLoad(options) {
    await app.loadUserInfo();
  },
  /**
   * 保存配置事件
   */
  onSubmitEvent(event) {
    console.log(event)
    const that = this;
    // 自动设置职位类型
    this.autoSetExpectationName();
        
    // 检查expectationName是否为空
    if (!that.data.expectationName) {
        wx.showToast({
            title: '请选择职位类型',
            icon: 'none'
        });
        return;
    }
    const uniqueid = Date.now() + Math.floor(Math.random()*100000);
    const expectation = {
      id:uniqueid,
      expectationName: that.data.expectationName,
      expectationCity: that.data.expectationCity,
      expectationPosition: that.data.formData.jobs,
      expectationIndustry: that.data.formData.industries,
    }
    console.log(expectation)
    db.collection("resume").where({
      _openid: app.globalData.openid
    }).update({
      data:{
        expectation: _.push(expectation),
      },
      success:res=>{
        console.log('添加成功', res)
        wx.showToast({
          title: '保存成功',
          icon: 'success'
        })
        setTimeout(() => wx.navigateBack({}), 1500);
      }
    })
  },
})
<!--components/expectation/expectation.wxml-->
<view class="expectation-container">
  <view class="title">添加求职期望</view>
  <view class="add-content">添加的求职期望不同,推荐的职位也不同</view>
  
  <view class="add-list">
    <view class="add-list-title">职位类型</view>
    <view class="list-content" wx:if="{{showPartTimeOnly}}">
        <view class="fixed-text">{{natures[0].name}}</view>
    </view>
    <view class="list-content" wx:elif="{{showFullTimeOnly}}">
        <view class="fixed-text">{{natures[1].name}}</view>
    </view>
    <view class="list-content" wx:else>
        <selector name="expectationName" array="{{natures}}" arrays="{{natures[0].name}}" bindcarporate="onCorporateEvent"></selector>
    </view>
  </view>
  
  <view class="add-list">
    <view class="add-list-title">其他期望城市</view>
    <view class="list-content">
        <city name="expectationCity" class="city" placeholder="{{expectationCity}}" bindCity="onCityEvent"></city>
    </view>
  </view>
  
  <view class="add-list">
    <view class="add-list-title">期望职位</view>
    <view class="add-list-content" bindtap="onJobExpectations">
        <input class="add-list-input" wx:if="{{!formData.jobsCount}}" placeholder="请选择期望职位" type="text" />
        <view wx:else class="add-list-text">
            <block wx:for="{{formData.jobs}}" wx:key="index">
                <view class="text-list">
                    <view name="expectationPosition" class="tag">{{item}}</view>
                    <view class="jobCount" wx:if="{{formData.jobsCount > 1}}">、</view>
                </view>
            </block>
        </view>
        <icon class="icon"></icon>
    </view>
  </view>
  
  <view class="add-list">
    <view class="add-list-title">期望行业</view>
    <view class="add-list-content" bindtap="onIndustryList">
        <input class="add-list-input" wx:if="{{!formData.industriesCount}}" placeholder="请选择期望行业" type="text" />
        <view wx:else class="add-list-text">
            <block wx:for="{{formData.industries}}" wx:key="index">
                <view class="text-list">
                    <view name="expectationIndustry" class="tag">{{item}}</view>
                    <view class="jobCount" wx:if="{{formData.industriesCount > 1}}">、</view>
                </view>
            </block>
        </view>
        <icon class="icon"></icon>
    </view>
  </view>
  
  <view class="add-list">
    <view class="add-list-title">薪资要求</view>
    <view class="list-content">
        <selector-tow name="income" wx:if="{{showPartTimeOnly || expectationName=='全职'}}" bindcarporate="onincomeEvent"></selector-tow>
        <selector-tow name="income" wx:elif="{{showFullTimeOnly || expectationName=='临/兼职'}}" bindcarporate="onincomeEvent"></selector-tow>
    </view>
  </view>
</view>
// components/expectation/expectation.js
const app = getApp();
const db = wx.cloud.database();
Component({
    /**
     * 组件的属性列表
     */
    properties: {},


    /**
     * 组件的初始数据
     */
    data: {
        natures: [{id: 0,name: '全职'}, {id: 1,name: '临/兼职'}],
        expectationCity: '请选择工作城市',
        showPartTimeOnly: false, 
        showFullTimeOnly: false, 
        expectationName: '',
        formData: {
            jobs: [],
            jobsCount: 0,
            industries: [],
            industriesCount: 0
        },
    },
    /**
     * 组件生命周期
     */
    lifetimes: {
        attached() {
            // 组件加载时获取数据
            this.getExpectationField();
            this.autoSetExpectationName()
        }
    },
    /**
     * 组件的方法列表
     */
    methods: {
        /**
         * 职位类型选择事件
         */
        onCorporateEvent(event) {
            console.log(event)
            this.setData({
                expectationName: event.detail.index
            })
        },
        /**
         * 固定职位类型
         */
        autoSetExpectationName: function () {
            console.log("showPartTimeOnly"this.data.showPartTimeOnly)
            console.log("showFullTimeOnly"this.data.showFullTimeOnly)
            if (this.data.showPartTimeOnly) {
                this.setData({
                    expectationName: '全职' // 注意:这里根据你的显示逻辑可能需要调整
                });
            } else if (this.data.showFullTimeOnly) {
                this.setData({
                    expectationName: '临/兼职' // 注意:这里根据你的显示逻辑可能需要调整
                });
            }
            // 如果两者都为false,则expectationName将由选择器设置
        },
        /**
         * 城市选择事件
         */
        onCityEvent(event) {
            console.log(event);
            var that = this;
            var index = event.detail.index;
            that.setData({
                expectationCity: index,
            })
        },
        /**
         * 期望职位点击事件
         */
        onJobExpectations(e) {
            console.log(e)
            const selected = encodeURIComponent(
                JSON.stringify(this.data.formData.jobs)
            );
            console.log(selected)
            console.log(this.data.formData.jobs)
            wx.navigateTo({
                url: `/pages/position-list/position-list?selected=${selected}&type=position`
            });
        },


        /**
         * 期望行业点击事件
         */
        onIndustryList() {
            const selected = encodeURIComponent(
                JSON.stringify(this.data.formData.industries)
            );
            wx.navigateTo({
                url: `/pages/industry-list/industry-list?selected=${selected}&type=industry`
            });
        },


        /**
         * 薪资要求选择事件
         */
        onIncomeEvent(event) {
            const index = event.detail.value;
            this.setData({
                incomeIndex: index,
                selectedIncome: this.data.incomeOptions[index]
            });
        },


        /**
         * 获取数据
         */
        async getExpectationField() {
            try {
                const expectationsRes = await db.collection("resume").where({
                    _openid: app.globalData.openid,
                }).field({
                    expectation: true,
                    _id: false,
                }).get();
                console.log("获取期望字段数据", expectationsRes.data);


                // 检查是否获取到数据
                if (expectationsRes.data.length === 0) {
                    console.log("没有找到期望字段数据");
                    return;
                }


                // 获取expectation数组
                const expectationValues = expectationsRes.data[0].expectation || [];
                console.log("获取期望值数组", expectationValues);


                // 处理数据并更新状态
                this.processExpectationData(expectationValues);


                // 保存完整数据到data中
                this.setData({
                    // posimes: posimesRes,
                    expectationValues: expectationValues
                });
            } catch (error) {
                console.error("获取数据失败:", error);
                wx.showToast({
                    title: '获取数据失败',
                    icon: 'none'
                });
            }
        },
        /**
         * 处理期望数据并更新显示状态
         */
        processExpectationData(expectationValues) {
            let fullTimeCount = 0;
            let partTimeCount = 0;


            // 统计全职和临/兼职数量
            expectationValues.forEach(item => {
                if (item.expectationName === '全职') {
                    fullTimeCount++;
                } else if (item.expectationName === '临/兼职') {
                    partTimeCount++;
                }
            });


            console.log(`全职数量: ${fullTimeCount}, 临/兼职数量: ${partTimeCount}`);


            // 根据数量关系设置显示状态
            this.setData({
                showFullTimeOnly: fullTimeCount >= 5 && partTimeCount < 5,
                showPartTimeOnly: partTimeCount >= 5 && fullTimeCount < 5
            });


            // 如果显示选择器,初始化选择值
            if (!this.data.showFullTimeOnly && !this.data.showPartTimeOnly) {
                if (expectationValues.length > 0) {
                    const item = expectationValues[0];
                    const natureIndex = this.data.natures.findIndex(n => n.name === item.expectationName);
                    if (natureIndex !== -1) {
                        this.setData({
                            natureIndex,
                            expectationName: item.expectationName
                        });
                    }
                }
            }
        }
    },
    processExpectationData: function (expectationValues) {
        let fullTimeCount = 0;
        let partTimeCount = 0;


        // 统计全职和临/兼职数量
        expectationValues.forEach(item => {
            if (item.expectationName === '全职') {
                fullTimeCount++;
            } else if (item.expectationName === '临/兼职') {
                partTimeCount++;
            }
        });


        console.log(`全职数量: ${fullTimeCount}, 临/兼职数量: ${partTimeCount}`);


        // 根据数量关系设置显示状态
        this.setData({
            showFullTimeOnly: fullTimeCount >= 5 && partTimeCount < 5,
            showPartTimeOnly: partTimeCount >= 5 && fullTimeCount < 5
        });


        // 如果显示选择器,初始化选择值
        if (!this.data.showFullTimeOnly && !this.data.showPartTimeOnly) {
            this.setData({
                selectedNature: expectationValues.length > 0 ? expectationValues[0].expectationName : '全职'
            });
        }
    }
})
回答关注问题邀请回答
收藏
登录 后发表内容