最近系统有很大的架构调整,组内没有专业前端,于是我这个半桶水被派去做前端任务,而且在我刚刚熟悉knockout的时候放弃,使用从未用过的angular框架,看着那道高高的学习曲线苦不堪言。
任务中涉及到大量的表单提交,而且同页面可能根据选项的不同而得到不同的表单项,对于这个我提出动态表单的想法,通过后端接口得到具体表单中的项类型、名称、属性、长度、正则等信息,然后前端通过类型判断生成不同的html。一查文档angular中的directive好像就是干这个事的,但是基本上都是一个标签,比如一个
<icon> </icon>。而我的目标则是整个<form> </form>。
想法不错,可是由于学艺不精,这个用angular我实现不出来,但是C#咱们熟啊,先用C#代码实现动态表单的工作,在使用
ng-model绑定模型时发现radio类型的标签模型中获取不到值,经过测试发现还是bootstrap的老问题,该$('input')[0].checked=true,但是attr('checked')却是空,想了几个办法,后来发现一个最为简单暴力的,就是在外层的label上添加一个ng-click方法,直接将该值赋给对应的model。 ng-click="formData.@input.Code=@radioData.Value"@foreach (var radioData in input.InputSource)
{
<label class="btn btn-primary" ng-click="formData.@input.Code=@radioData.Value">
<input type="radio" name="@input.Code" value="@radioData.Value" autocomplete="off" ng-model="formData.@input.Code">@radioData.Name
</label>
}
现在学angular貌似有点晚了,最近都是推崇其他的前端框架,像react、vue等,今天居然看到google自己也推了另一个框架叫polymer,感觉有点完全学不过来的节奏啊,不过先学通一个再学别的应该不难,如果熟练掌握了angular我也可以说自己是个基本合格的前端了吧。那个动态的form如果我能实现一定放到github上,希望有朝一日那么牛逼。
没有评论:
发表评论