一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法
这篇文章也许会不定时更新,主要记录这段时间内自己遇到的angularjs学习开发的一些问题的解决办法。本文以摘抄为主,主要目的还是将自己遇到的困惑在各个地方查到的解决办法的汇总,给自己留个备忘吧。
1、新手在初次使用angularJS router的时候往往会忘记引用angular-route.min.js以及注入相关依赖,导致类似
Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.2.0rc1/$injector/modulerr?p0=muninn&p1=Error%…eapis.com%2Fajax%2Flibs%2Fangularjs%2F1.2.0rc1%2Fangular.min.js%3A31%3A252)
报错。 解决方法:引用并注入对应的依赖。 引用来自: http://stackoverflow.com/questions/18287482/angularjs-1-2-injectormodulerr/18287586#18287586 2、ngCLass,可以使用ngClass来控制某些节点的css样式,来实现一些诸如显示与否的操作,这里引用一篇ngClass的介绍 来自:
http://www.cnblogs.com/whitewolf/archive/2013/05/22/3092184.html 3、angular重写的form的使用tip,先描述我遇到的问题:
- 通过后端接口返回的一组数据绑定到scope对象再循环打印到一个表格中,选中表格其中一行来进行修改信息。
- 需要对不同的字段做不同的验证,并且存在非必填字段如果填写也需要格式验证,验证不通过不提交
- 对未进行过修改的表单不提交
解决方法:
- 数据绑定这块儿不需要赘述,给循环的tr标记绑定ngCLick事件,
传入循环的一组data数据,为了去掉传入的数据与弹出修改信息数据之前的双向绑定,可以使用angular.copy()方法复制一份数据然后再绑定到表单上面。
- 对不同的表单进行验证,则可以参考下面的这一篇文章
http://www.cnblogs.com/lvdabao/p/3533585.html - 对于未修改的表单可以参考配合gDisabled="memberForm.$invalid || memberForm.$pristine"来进行处理
4、分页管理,网上有很多的angular的分页管理的资料,我这边根据自己的需求写了一个自己分页,也许不适合大众,仅供参考
我的设计思路如下:设计背景是后端的同学提供本次查询的所有条目以及每页数量以及当前页码,我这边根据总数计算出页数,其中页数的显示为,以当前页为中心显示就近的前后8页,如果当前页在4页之前或者在最后的四页之内,则依次顺推显示够9页
if (resp.data.page.rowsCount == 0) {
$scope.noSearch = false; }else{
$scope.noSearch = true; }
$scope.memberInfo = resp.data; $scope.pagination = {};
$scope.pagination.length = Math.ceil(resp.data.page.rowsCount / resp.data.page.pageSize); $scope.perPage = false;
$scope.nextPage = false; if($scope.memberInfo.pageIndex == '1'){
$scope.perPage = true;
}else if($scope.memberInfo.pageIndex == $scope.pagination.length){
$scope.nextPage = true;
} $scope.isActive = function(data){
if(data == $scope.memberInfo.pageIndex){
return true;
}else{
return false;
}
} $scope.pagination.info = []; if($scope.pagination.length > 10){
var upBoundary = parseInt(resp.data.page.pageIndex) + 4 > 9 ? parseInt(resp.data.page.pageIndex) + 4 : 9;
upBoundary = upBoundary <= $scope.pagination.length ? upBoundary : $scope.pagination.length;
var downBoundary = parseInt(resp.data.page.pageIndex) - 4 < 1 ? 1 : parseInt(resp.data.page.pageIndex) - 4;
downBoundary = $scope.pagination.length - downBoundary >= 9 ? downBoundary : $scope.pagination.length - 9;
var currentPage = parseInt(resp.data.page.pageIndex); for(var i = 1; i<= $scope.pagination.length; i++){
var up = i <= upBoundary && i >= currentPage;
var down = i >= downBoundary && i <= currentPage;
if(up || down){ $scope.pagination.info.push(i); }
}
}else{
for(var i = 1; i<= $scope.pagination.length; i++){ $scope.pagination.info.push(i); }
}
最后的设计结果显示如下图:
aaarticlea/png;base64,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" alt="" />
不足9页的自动以实际数量为主,具体的单击每页的效果可以单独写,并不复杂
5、省市区级联,在表单里面进行地址输入的时候,能够选择省市区的情况下自然就比用户手动输入要方便并且能够保证数据的准确性。这里我所遇到的情况便是后端同学通过接口不同的状态返回不同的查询结果来供我进行省市区的级联调用,配合用户已经数据的数据进行接口信息调用。
设计思路如下,如果表单内已经包括,则根据后端返回的省ID进行级联查询,如果没有则绑定ngChange事件在select元素上面,最终实现,一致的效果。这部分的代码比较简单,这里就不贴示例了
以上便是我这个项目开发过程中备忘的结果,说不定以后不定期更新。
------------------------------------2016年8月27日更新---------------------------------
- 通过ng-bind进行数据绑定在有filter的情况下做字符串的拼接。简单介绍一下遇到的情况,就是产品设计稿里要求在当前的表格中打印出后端返回的数据的同时,跟上一个其他内容,比如某个单元格打印,金额+备注这种形式,如果我们写ng-bind="amount | filter + remark"这种拼接形式会报错,正确的做法是使用()来提升运算符的优先级,ng-bind="(amount | filter) + remark"使得将格式化后的字符串再进行拼接,或者可以使用filter传参的形式将需要拼接的内容以参数的形式传给回掉函数,来实现在filter里面拼接并返回。filter传参写法为ng-bind="amount | filter : remark"。
第一种字符串拼接可以参考这个答案:http://stackoverflow.com/questions/24463473/add-more-text-after-using-a-filter-in-ng-bind-in-angularjs
第二种传参的形式可以参考以下:http://www.cnblogs.com/lvdabao/p/3475426.html - 另一个是一个备忘,我在实际开发过程中遇到需要将通过ng-repeat显示的数据需要判定显示在不同单元格的时候,并没有找到特别好的办法,我的做法是将服务器返回的数据自己在controller 里面进行二次循环然后对循环的数据直接格式化,来实现前端模板渲染的效果,如果哪天在哪里看到更好的办法,就会回这里补充。
一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法的更多相关文章
- 学习安卓开发过程中遇到关于R.Java文件的问题
在学习安卓开发过程时,遇到R.java生成问题,总结几个方法解决. 1.首先必须做的就是检查代码的正确性,存在错误的代码,不编译生成R.java 2.右键点项目,选择 Android Tools -& ...
- python学习中遇到的错误及解决办法
1. nodename nor servname provided 原因:Python程序中有段程序调用 socket.gethostbyname(socket.gethostname()) sock ...
- 学习Android过程中遇到的问题及解决方法——网络请求
在学习Android的网络连接时遇到崩溃或异常(出现的问题就这两个,但是不稳定)的问题,先上代码,看看哪里错了(答案在文末) activity_main.xml: <?xml version=& ...
- iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...
- 二.JSP开发过程中遇到的问题及解决
一.开发环境问题 问题一:Failed to load the JNI shared library 启动Eclipse时弹出“Failed to load the JNI shared librar ...
- python学习笔记30(全局变量的两种解决办法)
先看程序: >>> count = 0 >>> def fuc(count): print count count +=1 >>> for i i ...
- 学习Android过程中遇到的问题及解决方法——AS为xutils添加依赖
在使用xutils时遇到不能添加以来的问题,花了很长时间终于解决,网上添加依赖的方法很多,在此针对个人出现的问题作下笔记. 我本想使用jar包,因为在使用smartImageView时是用的jar包来 ...
- 学习Android过程中遇到的问题及解决方法——电话监听
也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误 ...
- Selenium学习(三)Selenium总是崩溃的解决办法
在使用selenium打开浏览器总是崩溃,最近查资料获得可行的解决办法: import sys from selenium import webdriver p = __import__('selen ...
随机推荐
- Mac下安装GIT的坑
先去 https://git-scm.com/download/mac 下载 GIT 客户端 双击安装,界面中有三个文件 接着双节 .pkg 文件,却提示无法安装 解决方式是按住 Control ,再 ...
- 基于TCP的网络编程
HTTP协议,FTP协议等很多广泛应用的协议均基于TCP协议.TCP编程主要为C/S模式,客户端和服务器之间的程序设计存在较大差异. TCP编程框图 服务器调用socket().bind().list ...
- Django 前后台的数据传递
Django 从后台往前台传递数据时有多种方法可以实现. 最简单的后台是这样的: from django.shortcuts import render def main_page(request): ...
- hadoopfs: 未找到命令...
https://zhidao.baidu.com/question/240817305095236244.html 学习hadoop测试http://blog.csdn.net/thinkpadshi ...
- 《Markdown 一些基本语法》
Markdown编辑器是在上学期学习Java时写博客用来编辑文字内容以及形式的,但其实当时掌握Markdown的语法却是极少的,也仅仅是会使用几级标题这样简单的语法,就和当时学习git上传代码一样,也 ...
- [EF2]Sneak Preview: Persistence Ignorance and POCO in Entity Framework 4.0
http://blogs.msdn.com/b/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-en ...
- CSS布局
1流动模型 先来说一说流动模型,流动(Flow)是默认的网页布局模式.也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的. 流动布局模型具有2个比较典型的特征: 第一点,块 ...
- C#计算代码执行时间
System.Diagnostics.Stopwatch watch = new Stopwatch();watch.Start(); //要计算的操作 DoSomeThing(); watch.St ...
- django -model
Model 属性 STATUS=( (0,"正常"), (-1 ,"删除") ) Choices =STATUS //是用户处理数据返回参数做处理 如果增加了 ...
- iOS之UITableView组头组尾视图/标题悬停
最近笔者在公司的iOS开发中,有一个iOS开发同事跑来问了两个问题:1.给UITableView设置了组头和组尾视图,但是一直显示不出来?2.UITableView的section的header和fo ...