这篇文章也许会不定时更新,主要记录这段时间内自己遇到的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,先描述我遇到的问题:
  1. 通过后端接口返回的一组数据绑定到scope对象再循环打印到一个表格中,选中表格其中一行来进行修改信息。
  2. 需要对不同的字段做不同的验证,并且存在非必填字段如果填写也需要格式验证,验证不通过不提交
  3. 对未进行过修改的表单不提交

解决方法:

  1. 数据绑定这块儿不需要赘述,给循环的tr标记绑定ngCLick事件,

    传入循环的一组data数据,为了去掉传入的数据与弹出修改信息数据之前的双向绑定,可以使用angular.copy()方法复制一份数据然后再绑定到表单上面。

  2. 对不同的表单进行验证,则可以参考下面的这一篇文章
    http://www.cnblogs.com/lvdabao/p/3533585.html
  3. 对于未修改的表单可以参考配合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,iVBORw0KGgoAAAANSUhEUgAAAUoAAABLCAIAAACZYFlDAAAGu0lEQVR4nO3dz2viaBzH8f5P/Tf278hBFnLIQalIESEULLiHHJyDhxZ0YIRlKaGDBykoSw4WNocK9aChyXaCM7F1w6QMYQf3oK1W0/pE8zw+Pvt5MZeR+n10fN5N/MF48B0ARDSZTA4CABAO8gYQFvIGEBbyBhAW8gYQFvIGEBbyBhAW8gYQFvIGEBbyBhAWR3mPRiPHcSzL6u+51bt2ePSZ9p9d32nerT4ou75FCXAcZzwev9MUL3mPRiPLsnzf//nz52Sf9XeUd0hTv9/f9/mrDwrtRRl4fHy0LOudwnnJ23Gc6U3Zd8ibz/mrD4oAeYdh+Pj46DjOW1nxkne/3991mMlA3nzOj9xyVBdl48ePH5ZlvZUV8k4Y8uZzfuSWo7ooM5H3bgp5Jwx58zk/cstRXZQZ5M0O8uZzfuSWo7ooM8ibHeTN5/zILUd1UWaQNzvIm8/5kVuO6qLMIG92kDef8yO3HNVFmRE47/DJfwqTDXQ7yJvP+ZFbjuqizIib9/DqNK0Z/pZJ+reX1TUubwkXQd58zo/cckRXDmzT7LneO9ye2fPi3SLPrJfXqJuEM8XO++xmk2suCoe35qL2WaFw1n510e2Q8Bwhibw7F1+f/vyDTt6uUSvlFUXJlfTemPRKMfILXONczSk5tdygMv9Zr54vNl3y+ZFbjujKbrOoLJJTkpRSlpyb8W5+YJvGooamKFrj1UWmHWxx76aQd4Tb6uanBFvn3anehZNJeK1TyDswy7JcrHUG3qBVkiW1SX58IPtBr6mm8rWu6w2MckbK6XbC8591K7JEPj7Zk/OOFmNlUmaZ/NFY9r/KOww3ey5+d3lamDnOprPHhRdn10/kY7bMu/rlX//LP9/o5D1uablad/YXW89JWod4AxH93EBXS8+bNGiVEp8/m2yWZVmW9z/vXj23cEqQkucnA1qL+MxH9LyXbXg0H16dpivX/pL+xUm8gVvm/evHv345+tuidPR+tbdqilzprv+52QaKO35saHKmNkh+/rijybm6bcSJjErerkv63OAttp6TSq3lZ/LdWob492IYhqLn/UZ9w7ZWWEtrDyNG3V5on8yHdQtQyfvw6PMhi7zHrVK8PGLM9sxzVUmlyJ8ax5g/7mhKXrdjHkMp5O028pKUr716fcFuqMvPyVepjZdbvXACZdbUiuEuX7rFvZsSN2+/f31trnNz56+O8g0tfWauXWCP87b1fCof4wQzZgnBeNCpFWVZ6xCeYpLOHxuaPLvdu847nP4rSpmK+XInvW6rZazTmb/IPg/Za6qSZixfus29mxI3781H3V0UTi6HGy6wB3nbej4V73WcTUoIWiUpr5MdwMnmBx1Nlkv6tJJzVVK0hkH2hhS1594rhccyD7lXUzJ1e/lSQsg7zqj7i5PjT/2FSyvXMV6s4z1vuxnnsDrfQEQ/Z57nKubz2zmGlnDer94rVjOSnC+Vm0TP7mm+tGY3dWPDl7xfQh7UMvPXQabPyAnfFAtD5E0kfPL9pzC8v/wtfXo1nDwYWvb0rN2P+/4Y13kHZlmWlOcDIPlbq8SfADHLslzUu67ba1B5422Og5PzrQVjzxsHwaCel3K6HbpNNZXTGt24vywEynvpEyjts0Ja+33lKfXdJm9ah8Obiw+FbKFqTq8dPpifTrPpwoerO3ZvjB0efT48ur36+njxkULeg+ZmH4yKUcLsYzM59dxwiY9AG5Q2aJJ/rIvXvMPA7tSKSkopz47/gWtUcilJKcb4yJFQeRN8frRarRr3scIetrXjbDqdLVSulo/W4YNZPUlnqzek5+f4UCqf8yO33EbDEsnbbqjTT7+V9OWjdeAa5YyUKndIfzsKlDclD/d3/tsB+z754Rt58zk/cstRXXQNd9Dz3g7Y88gP38ibHeTN5/zILUd1UWaQNzvIm8/5kVuO6qLMIG92kDef8yO3HNVFmUHe7CBvPudHbjmqizKDvNlB3nzOj9xyVBdlBnmzg7z5nB+55aguygzyZgd58zk/cstRXZSN/fgSInyFIPKmOn/1QREj7/34CsHpFwAHQYAvAEbeNOavPigC5L03XwAcBMFoNHIcx7Ks/p5bvWsM8t71nebd6oOy61uUAMdx3mk74CpvAEgW8gYQFvIGEBbyBhAW8gYQFvIGEBbyBhAW8gYQFvIGEBbyBhAW8gYQFvIGEBbyBhAW8gYQFvIGENYs7+8AIKLJZHLA+v80AQBWkDeAsJA3gLCQN4CwkDeAsJA3gLCQN4CwkDeAsJA3gLCQN4CwDjwAENTBrr8LDQBowck5gLCQN4Cw/gMpt7WTMmHmGgAAAABJRU5ErkJggg==" alt="" />

  不足9页的自动以实际数量为主,具体的单击每页的效果可以单独写,并不复杂

  5、省市区级联,在表单里面进行地址输入的时候,能够选择省市区的情况下自然就比用户手动输入要方便并且能够保证数据的准确性。这里我所遇到的情况便是后端同学通过接口不同的状态返回不同的查询结果来供我进行省市区的级联调用,配合用户已经数据的数据进行接口信息调用。

  设计思路如下,如果表单内已经包括,则根据后端返回的省ID进行级联查询,如果没有则绑定ngChange事件在select元素上面,最终实现,一致的效果。这部分的代码比较简单,这里就不贴示例了

以上便是我这个项目开发过程中备忘的结果,说不定以后不定期更新。

------------------------------------2016年8月27日更新---------------------------------

  1. 通过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
  2. 另一个是一个备忘,我在实际开发过程中遇到需要将通过ng-repeat显示的数据需要判定显示在不同单元格的时候,并没有找到特别好的办法,我的做法是将服务器返回的数据自己在controller 里面进行二次循环然后对循环的数据直接格式化,来实现前端模板渲染的效果,如果哪天在哪里看到更好的办法,就会回这里补充。

一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法的更多相关文章

  1. 学习安卓开发过程中遇到关于R.Java文件的问题

    在学习安卓开发过程时,遇到R.java生成问题,总结几个方法解决. 1.首先必须做的就是检查代码的正确性,存在错误的代码,不编译生成R.java 2.右键点项目,选择 Android Tools -& ...

  2. python学习中遇到的错误及解决办法

    1. nodename nor servname provided 原因:Python程序中有段程序调用 socket.gethostbyname(socket.gethostname()) sock ...

  3. 学习Android过程中遇到的问题及解决方法——网络请求

    在学习Android的网络连接时遇到崩溃或异常(出现的问题就这两个,但是不稳定)的问题,先上代码,看看哪里错了(答案在文末) activity_main.xml: <?xml version=& ...

  4. iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】

    在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...

  5. 二.JSP开发过程中遇到的问题及解决

    一.开发环境问题 问题一:Failed to load the JNI shared library 启动Eclipse时弹出“Failed to load the JNI shared librar ...

  6. python学习笔记30(全局变量的两种解决办法)

    先看程序: >>> count = 0 >>> def fuc(count): print count count +=1 >>> for i i ...

  7. 学习Android过程中遇到的问题及解决方法——AS为xutils添加依赖

    在使用xutils时遇到不能添加以来的问题,花了很长时间终于解决,网上添加依赖的方法很多,在此针对个人出现的问题作下笔记. 我本想使用jar包,因为在使用smartImageView时是用的jar包来 ...

  8. 学习Android过程中遇到的问题及解决方法——电话监听

    也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误 ...

  9. Selenium学习(三)Selenium总是崩溃的解决办法

    在使用selenium打开浏览器总是崩溃,最近查资料获得可行的解决办法: import sys from selenium import webdriver p = __import__('selen ...

随机推荐

  1. 通过XShell链接虚拟机的CentOS

    今天在Win7环境通过XShell链接VirtualBox的CentOS;始终链接不上,原来是因为虚拟机选择网络链接方式不对[推荐连接方式:Host-only Adapter(主机模式). 知识提要: ...

  2. Leetcode 57: Insert Interval 让代码更好读, 更容易测试.

    阅读了几个博客, 决定写一个简易版本; 忙着做更多题, 没有时间多考虑优化代码, 所以, 就写一个试试运气. http://blog.csdn.net/kenden23/article/details ...

  3. python学习6

    1.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. eg: 2. reduce把一个函数作用在一个序 ...

  4. [No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键

    捕获控制台(console)关闭事件: 1.Ctrl+C信号: 2.Ctrl+Break信号: 3.用户系统关闭Console时: 4.用户退出系统时: 5.系统将要关闭时: using System ...

  5. Linux中C程序调试、makefile

    gcc基本语法格式:gcc [-选项] 源文件 [-选项] 目标文件,GCC编译C程序的过程: 预处理:gcc -E hello.c hello.i.-E指定执行到预处理结束,下面类似. 编译:gcc ...

  6. [LeetCode] Kth Smallest Element in a BST 二叉搜索树中的第K小的元素

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...

  7. 简单的浏览器调试——console命令

    一.显示信息 <script type="text/javascript"> console.log('hello'); console.info('信息'); con ...

  8. mysqld初探

    一.简介 deamon是守护神的意思,表示守护进程.mysqld就是mysql的服务器端,就是基于socket的一个服务器端程序,它始终监听3306端口(默认端口).mysql是客户端程序. 安装my ...

  9. Java NIO使用及原理分析(1-4)(转)

    转载的原文章也找不到!从以下博客中找到http://blog.csdn.net/wuxianglong/article/details/6604817 转载自:李会军•宁静致远 最近由于工作关系要做一 ...

  10. mac上安装ubuntu双系统

    mac和ubuntu双系统 mac系统安装ubuntu双系统的方法, mac系统要安装ubuntu, 必须使用u盘作为启动盘, 在mac启动的时候引导mac安装ubuntu, 下面为详细的安装方法: ...