一些关于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 ...
随机推荐
- 简单配置 nginx 反向代理
# Nginx 域名反向代理配置# 安装nginx yum install nginx -y# 修改配置文件 进入配置文件目录 cd /etc/nginx/conf.d 新建配置文件以.conf结尾 ...
- x01.os.21: print "Loading..."
Linux Inside 是中文版,值得下载一读. 先把目标设低点,开机进入后,在屏幕上打印“Loading..."即可.由于要在 bochs 中运行,首先就是安装 bochs.Oldlin ...
- [iOS]ReactiveCocoa安装方法
1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...
- EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉
2014年7月EZchip花1.3亿美元收购的Tilera2015年10 Mellanox 8亿美元收购EZchip,2016年1月完成.EZchip转手卖掉Tilera与自己? http://www ...
- Hash 函数及其重要性
不时会爆出网站的服务器和数据库被盗取,考虑到这点,就要确保用户一些敏感数据(例如密码)的安全性.今天,我们要学的是 hash 背后的基础知识,以及如何用它来保护你的 web 应用的密码. 申明 密码学 ...
- linux umount
linux umount 提示"device is busy" 终极解决方法 http://www.wisdr.com/news/20120621174117.htm 这里面的方法亲测可用. 小tip ...
- Basic EEG waves 四种常见EEG波形
Source: https://www.medicine.mcgill.ca/physio/vlab/biomed_signals/eeg_n.htm The electroencephalogram ...
- Linux 进程与线程六
//线程间的通信 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <e ...
- quartus和modelsim中使用mif和hex文件
.mif和.hex文件都是Quartus支持的数据文件格式,常被用作内存初始化文件.可是,M odelSim却不支持.mif文件,只支持.hex文件格式,这意味着如果你的设计采用了.mif文件 ,你的 ...
- Gradle 下载
gradle各个版本的下载地址 :http://services.gradle.org/distributions 下载完后的gradle怎么使用呢? //下面是网上提供的方法,仅供学习参考 在 ht ...