【Angular2】AnswerSheet组件设计
来源:互联网 发布:淘宝怎样绑定手机号 编辑:程序博客网 时间:2024/06/15 08:19
引言
在【Angular2】试卷整体设计中说到AnswerSheet组件的卡功能是可以显示用户对每道题答题状态,点击答题卡可以定位到相应题目;
同时,这里也有一些组件交互的问题需要讨论
功能要求
1.显示用户对每道题答题状态;
2.点击答题卡可以定位到相应题目;
代码说明
html code
<div id="answer_sheet"> <div class="sidebar_title">答题卡</div> <div *ngIf="exampaper"> <div *ngFor="let qt of exampaper.paperQuestionTypeList; let i=index"> <div class="cards"> <h4>{{USN[i]+qt.questionTypeName}}</h4> <div *ngFor="let qm of qt.questionMainList; let j=index"> <!-- 题干没有子题干 --> <!-- <div id="{{qm.id}}" class="card" (click)="locateQuestion($event.target)">{{j+1}}</div> --> <!-- 题干有子题干,进行判断 --> <div *ngIf="qm.questionSubList[0]"> <div id="{{qm.id}}" class="card" (click)="locateQuestion($event.target)">{{j+1}}</div> </div> <div *ngIf="!qm.questionSubList[0]"> <div *ngFor="let qs of qm.smallquestionMainList; let k=index"> <div id="{{qs.id}}" class="card" (click)="locateQuestion($event.target)">{{k+1}}</div> </div> </div> </div> <div style="clear:both;"></div> </div> <br/> </div> </div></div>
html 说明
这里就是对数据的循环处理,需要注意的数据中的子题干问题,因为答题卡也是通过试卷实体来遍历出要显示的内容;
这里简单说一下试卷实体,包括题型实体集合,题型集合中包括题干实体集合,题干实体包括选项实体集合和子题干实体集合,子题干实体集合又包括子题干实体集合和选项集合…所以遍历的时候需要依自己数据类型而定;
ts code
@Input() exampaper: ExamPaperModel; @Input() updatedAnswer: Answer; USN = UpSerialNumber; //大题题号(汉字) /* 监测父组件提供输入值的变化 */ ngOnChanges(changes: { [propKey: string]: SimpleChange }) { for (let propName in changes) { let changedProp = changes[propName]; let answer = <Answer>changedProp.currentValue; if (!changedProp.isFirstChange()) { let el = document.getElementById(answer.questionMainId); if(answer.done){ if (el != null) { el.setAttribute("class", "card_done"); } }else{ if (el != null) { el.setAttribute("class", "card"); } } } } } /* 定位到问题位置 */ locateQuestion(el: Element){ let questionid: string = el.getAttribute("id"); let questiondiv = document.getElementsByName(questionid); questiondiv[0].scrollIntoView(true);//true:元素顶部与窗口顶部齐平;false:元素底部与窗口底部齐平 }
ts 说明
如注释说明,通过simplechange机制来实现子组件监测父组件输入值得变化;
这里值得一提的是如果传入的是一个实体,simplechange监测的应该是实体的地址,如果是同一个实体,只改变实体里面的属性,是感知不到变化的,所以每次提交实体需要new一个新的;
小结
AnswerSheet组件就是对SimpleChange的一个应用,涉及到了组件之间的交互;
同时,需要设置好元素的id,进行相应的操作
阅读全文
0 0
- 【Angular2】AnswerSheet组件设计
- 【Angular2】OnlineExam组件设计
- 【Angular2】Information组件设计
- 【Angular2】ExamPaper组件设计
- 【Angular2】Question组件设计
- angular2 组件
- angular2 组件
- angular2 倒计时组件
- Angular2 倒计时组件
- Angular2自定义分页组件
- Angular2核心组件@Component
- angular2之组件通讯
- 【Angular2】理解组件
- 【Angular2】组件交互
- Angular2--组件生命周期
- angular2学习 之 组件
- Angular2核心组件@Component
- Angular2核心组件@Component
- JavaScript13 数组总结
- 求出1到10、20到30和35到45的三个和
- MVP和sqlite数据库,XRecyclerView上啦加载下拉刷新的第三方注册登录,列表
- 6.16
- 【java】求1-10的和。
- 【Angular2】AnswerSheet组件设计
- 14 个你可能不知道的 JavaScript 调试技巧
- 侧滑菜单xml和代码
- ROI Pooling层详解
- HDU
- 链表相关练习题
- 简单实现断点续传+MVP+Retrofit+RxJava
- 简单的断点传送,不需理解,粘贴运行
- 通国轮廓进行抠图 掩膜