总结—angularjs项目

我毕业了-------有点期待生活,又点害怕生活。

总结下最近一个月做的这个项目,项目的开发形式也比较新颖,采用的是前后端分离的形式。我负责前端的管理系统开发,另一个哥们负责利用ABP创建接口,整合后端代码,供前端访问,为其提供数据。前端采用angularjs来开发,之前学习过一点,但是好长时间没有使用,很多都忘记了,导致严重耽误了开发周期。看来以为新学习的东西还是要多使用,多了解。这次还有一个收获是对于我来说很有帮助,那就是学会写工作日志。按照“今日内容”、“明日计划”、“难点”这三个维度来写,感觉又get到了一个技能。希望自己在平时的工作中也可以使用到。

好了,不说废话,进入主题吧。

1:加载项目的整体依赖包(更新项目)

由于时间关系,开发的系统是别的系统上进行修改的,所有底层的配置都有。

npm install -g gulp bower
npm install

这里的意思是更新项目的所有依赖包,也就是将依赖包下载到本地。运行gulp项目就可以跑起来了。(前提是你本机安装npm nodejs)

2:使用release方式发布项目

gulp --env release build

3:上传语音文件获取文件名,音频播放总时间,并且将其序列化。

前端UI

<span class="input-group-btn btn-left">
     <div>
          <input type="button" class="btn green" value="选择语音文件" ng-click="selectFile(‘#fileSelector‘)">
          <input class="hidden" type="file" file-model="question.frequencyUrl" name="myfile" id="fileSelector" required/>
          <audio id="audio" controls="" style="display: none;"></audio>
     </div>
</span>

JS操作

            $scope.selectFile = function(element) {
                $(element).click();
            }
            var file = $(‘#fileSelector‘);
            file.on(‘change‘, function(e) {
                var name = e.currentTarget.files[0].name;
                $(‘#fileName‘).val(name);
                //得到语音播放时间
                var objUrl = window.URL.createObjectURL(e.currentTarget.files[0]);
                $(‘#audio‘).attr(‘src‘, objUrl);
                getTime();
            })
            //利用FormData进行序列化
            var fd = new FormData();
            var filename = document.querySelector(‘input[type=file]‘).files[0];
            //console.log(filename.name);
            fd.append("userfile", filename); //序列化文件

将元素的文件上传隐藏掉,界面上显示一个按钮。当点击按钮时触发input为file的文件上传事件,最终完成上传。项目中由于是上传语音到腾讯云的COS,需要将文件进行序列化操作,利用FormData()方法完成文件的序列化操作。

对于音频时间的操作是通过将路径赋给界面上的audio标签来实现时间的获取的。上面只是显示了部分音频代码,缺少一个getTime()方法,由于需要将其时间保存成3′34′′这种形式,对其进行了转换。

            function getTime() {
                setTimeout(function() {
                    var duration = $("#audio")[0].duration;
                    if (isNaN(duration)) {
                        getTime();
                    } else {
                        var minutes = (duration / 60).toFixed(2); //多少分钟
                        var times = minutes.toString().split(‘.‘);
                        timenumber = times[0] + "′" + times[1] + "″";
                        console.log(timenumber);
                        //console.info("该歌曲的总时间为:"+duration+"秒")
                    }
                }, 10);
            }

4:ng中那些经常使用到的小标签

ng-show和ng-hide:它们是控制此出是否显示,赋值为bool,二者表达的意思正好相反。

UI

            <td ng-show="isWeChatPay(order.payMethod)">微信支付</td>
            <td ng-show="!isWeChatPay(order.payMethod)">其它</td> 

后台

            $scope.isWeChatPay=function(wechatpay){
                var isWePay=false;
                if(wechatpay==="WechatAppPay"){
                    isWePay=true;
                }else{
                    isWePay=false;
                }
                return isWePay;
            }

就是得到bool值,看应该展示那个,ng-hide正好相反。

ng-bind :绑定特定的文本或者字符串到此处。

UI

            <td ng-bind="modifyPrice(order.unitPrice)"></td>

后台

            $scope.modifyPrice=function(price){
                var temp=String(price).indexOf(‘.‘)+1;
                if(temp<=0){
                    price=price+".00";
                }
                return price;
            }

主要是展示绑定的内容。通过一个ng方法将值作为参数,传递进去,在后台对值进行处理,同事展示到前台。

5:ng中必要的表单填写完成之后,让显示提交按钮。

UI

            <div class="portlet-body form">
                <form role="form" name="createQuestionForm">
                    <div class="form-body">
                        <div class="form-group form-md-line-input form-md-floating-label has-info">
                            <input type="text" class="form-control" id="title" ng-model="question.title" name="title" ng-class="{‘edited‘:question.title}" required/>
                            <label for="title">问题</label>
                            <span class="help-block error-msg" ng-show="createQuestionForm.title.$error.required">
                               <span>
                                请输入问题标题
                               </span>
                            </span>
                        </div>
                        <div class="form-group form-md-line-input form-md-floating-label has-info">
                            <input type="text" class="form-control" id="lable" ng-model="question.lable" name="lable" ng-class="{‘edited‘:question.lable}" required/>
                            <label for="lable">关键字/标签</label>
                            <span class="help-block error-msg" ng-show="createQuestionForm.lable.$error.required">
                                <span>
                                请输入问题搜索关键字、标签
                                </span>
                            </span>
                        </div>
                    </div>
                    <div class="form-actions noborder">
                        <button type="button" class="btn blue" ng-click="create()" ng-disabled="createQuestionForm.$invalid">立即发布</button>
                        <a ui-sref="question" class="btn default">取消</a>
                    </div>
                </form>

form标签有个name=”createQuestionForm” 在每个必须要填写的内容中添加required,且都将默认显示的错误提示写好,最后在发布按钮这里使用ng-disabled=”createQuestionForm.$invalid”进行效验就可以了。其实来自ng前端的验证还有很多比如输入值类型,大小等。

6:使用select2做下拉框之前踩的坑

这次的医生选择框采用的是select2做插件的,为求达到用户填写姓名,在异步ajax请求显示指定数量的医生进行选择。

这次第一个坑是select2要显示的数据必须是id text这样的格式,日了狗,之前就说一直不显示出来,最后将其进行for转换才OK。第二个是后台通过ABP传递过来的json数据是json对象,而这个插件必须使用json的array形式才可以,那么就进行转换么。(主要是官网写的dome标记出来)

格式代码:第一行在select2中显示不出来,第二行就OK。必须进行转换

            var data = [{ "id": 2996, "name": "  林红飞" }, { "id": 1468, "name": " 郭建刚" }, { "id": 3013, "name": " 韩亚利" }];
            var datas = [{ id: 0, text: ‘enhancement‘ }, { id: 1, text: ‘bug‘ }, { id: 2, text: ‘duplicate‘ }, { id: 3, text: ‘invalid‘ }, { id: 4, text: ‘wontfix‘ }];

转换如下

            var arr=[];
            for(var i in data){
                data[i].text=data[i].name;
                delete data[i].name;
               arr.push(data[i]);
            }
            console.log(arr); 

医生下拉选择代码,实现按需加载。

            $(‘.doctorselect‘).select2({
                ajax: {
                    url: "http://dabei.llili.cn/api/doctors/list",
                    dataType: ‘json‘,
                    delay: 250,
                    data: function (params) {
                        return {
                            doctorName: params.term, // search term
                            page: params.page
                        };
                    },
                    processResults: function (data, params) {
                        var arr = [];
                        for (var i in data) {
                            data[i].text = data[i].name;
                            delete data[i].name;
                        }
                        //console.log(data);
                        params.page = params.page || 1;
                        return {
                            results: data,
                            pagination: {
                                more: (params.page * 30) < data.totalCount
                            }
                        };
                    },
                    cache: true
                },
                escapeMarkup: function (markup) { return markup; },
                minimumInputLength: 1
                placeholder: ‘请输入值‘,
                allowClear: true
            });

前端就需要一句话就OK。这里还有一个必须注意的placeholder占位符如果UI界面写ng-model标签就不能显示,对于我们的编辑功能来说简直是灾难。最后选择ng-select2来实现了。

时间: 2024-08-04 23:21:47

总结—angularjs项目的相关文章

angularJs项目实战!01:模块划分和目录组织

近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap + D3 + requirejs 的架构来实现它.angularjs早在去年6月份我就有所接触,将它应用在实验室项目的个别页面中,11月份在新浪的时候也将其推荐给了所在云事业部项目组.项目组老大程辉等人都是很有技术敏感性的人,大胆地采纳了我的建议,将之应用于原本使用dojo开发的项目前端模块上.然

AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储

AngularJS项目开发技巧之localStorage存储 绪 项目开发完毕,测试阶段发现后台管理端二维码生成有问题,问题在于localStorage的存储.如下图左所示,二维码生成完毕包含信息如下图左所示,实际二维码信息如下图右所示: 经过测试发现二维码实际存储的是上一次的结果.好熟悉~Bingo,自己做导航栏高亮时就遇到过这个问题,当时就是使用的localStorage.问题还是出在localStorage身上.但是存储时:localStorage.setItem(key,value),如

AngularJs项目

AngularJs项目实践总结 今年3月接触AngularJs,并且在6月的项目中开始应用,从踩坑到填坑花了不少时间,根据项目中的实际应用情况总结了一些经验,如下: 一.UI控件选择 Angularjs是不缺控件的,Github里现成的控件非常丰富,基本上足以应付一个普通管理系统中常见的控件需求.但是控件的丰富会带来选择的困难.选择控件要满足几个原则:原则1:符合业务场景原则2:控件持续更新原则3:满足性能要求 举几个例子.首先是上传附件的控件.项目中要用到附件上传,谷歌上搜到了三个控件,分别是

AngularJS项目NodeJS环境配置

需要安装的软件: node-v0.12.7-x64.msi python-2.7.10.amd64.msi Git-2.5.1-64-bit.exe (注意:Git安装时,需要选择的步骤)  安装位置: 配置环境变量: path路径下添加:(有些安装软件的时候自动生成) D:\Program Files\Git\cmd;D:\Program Files\Git\bin;D:\Program Files\nodejs\;D:\Program Files\python-2.7.10; cmd确认是否

使用Spring Boot和Gradle创建AngularJS项目

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 本文主要是记录使用 Spring Boot 和 Gradle 创建项目的过程,其中会包括 Spring Boot 的安装及使用方法,希望通过这篇文章能够快速搭建一个项目. 1. 开发环境 操作系统: mac JDK:1.7.0_60 Gradle:2.2.1 IDE:Idea 2. 创建项目

AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID

AngularJS项目开发技巧之获取模态对话框中的组件ID 需求 出于项目开发需求,须要实现的业务逻辑是:药店端点击查看"已发货""已收货"订单详情时.模块弹出框中仅仅应出现"取消"button.但现实的情况例如以下图所看到的. 模态框核心代码例如以下: <script type="text/ng-template" id="billDtlContent.html"> <div class

看angularjs项目的一些知识记录

这两天项目组长在安排我学习用angularjs+Echarts做的项目代码,边看边记录吧,给自己留个总结 1.Angularjs中UI Router文档 2.Angularjs中Material的使用 3.requirejs文档 几个指令特点记录 1.ng-value中可以写表达式 <input type="text" ng-value="price*num"/> 2.当我们点击checkbox 选中复选框时,ng-model 的绑定默认值是true,取

如何将angularJs项目与requireJs集成

关于angularjs.requirejs的基础知识请自行学习 一.简单事例的项目目录如下: -index.html -scripts文件夹 --controller文件夹 --- mianController.js --- controller1.js ---controller2.js --directives文件夹 ---mainDirective.js ---directive.js --app.js --router.js --main.js 二.首页 首先你的index.html大概

angularJs项目实战!03:angularjs与其他类库的协作

引言:angularjs是一个中等重量级的前端开发框架 HTML是一门很好的为静态文本设计的语言,但要构建动态的web应用它就显的乏力了.通常,我们使用以下技术来解决静态网页技术在构建动态应用上的不足: 1.类库:类库是一类函数的集合,它能帮助你写web应用.这里起主导作用是你的代码,由你来决定何时使用类库.典型的类库,例如prototype.jquery等. 2.框架:框架式一种特殊的.已经实现的web应用,你只需要填充具体的业务逻辑.这里框架是起主导作用的,由它根据具体的逻辑来调用你的代码.