You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular组件函数中调用服务saveStudent实现随机选在场学生

解决方案

完全可以实现,只需调整以下几个关键点:

1. 开放服务方法的访问权限

当前saveStudent是私有方法,组件无法直接调用,需要把它改成public:

public saveStudent(student: Student) {
    localStorage.setItem('student', JSON.stringify(student));
}

2. 实现在场学生的过滤逻辑

假设你的AbsentListService还没有提供获取在场学生的方法,先补充这个逻辑(根据实际的缺勤字段调整过滤条件):

// 在AbsentListService类中添加
public getPresentStudents(allStudents: Student[]): Student[] {
    // 示例:过滤掉标记为缺勤的学生,这里替换成你实际的判断逻辑
    return allStudents.filter(student => !student.isAbsent);
}

3. 重写selectRandomUser函数逻辑

更新组件中的方法,先筛选出在场学生,再随机选择,最后调用服务保存结果,同时修复原有的else语法错误:

selectRandomUser() {
    // 先获取所有在场学生
    const presentStudents = this.absentListService.getPresentStudents(this.student);
    
    // 处理没有在场学生的情况
    if (presentStudents.length === 0) {
        this.genderMessage = "Aucun utilisateur n'a été trouvé";
        console.log("没有在场学生");
        return;
    }

    // 随机选中一名在场学生
    this.selectedUser = presentStudents[Math.floor(Math.random() * presentStudents.length)];
    
    // 设置对应的提示语
    if (this.selectedUser.isWoman) {
        this.genderMessage = "Tu es la grande gagnante !";
        console.log("femme fonctionne");
    } else {
        this.genderMessage = "Tu es le grand gagnant !";
        console.log("homme fonctionne");
    }

    // 调用服务方法把选中的学生存入localStorage
    this.absentListService.saveStudent(this.selectedUser);
    
    console.log("选中的学生:", this.selectedUser);
}

4. 更新模板展示结果

修改HTML,让选中的学生信息和提示语能正常显示:

<main>
    <div class="launch">
        <button (click)="selectRandomUser()">🎰 Select a student 🎰</button>
    </div> 

    <div class="white-box-card">
        <div class="white-box">
            🌸
            <!-- 展示选中的学生信息 -->
            <div *ngIf="selectedUser">
                <h3>{{ selectedUser.name }}</h3>
                <p>{{ genderMessage }}</p>
            </div>
            <!-- 无在场学生时的提示 -->
            <div *ngIf="genderMessage && !selectedUser">
                <p>{{ genderMessage }}</p>
            </div>
        </div>
    </div>
</main>

内容的提问来源于stack exchange,提问作者Bergam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:17