使用AngularJS开发中的几个问题
1、AngularJS的模板绑定机制好像和其$http服务也有一定关系,如果用jQuery Ajax的返回值赋给$scope的作用域变量,整个绑定显示的节奏慢一个事件,神器果然麻烦啊。
2、对hidden input做绑定好像无效:1.2以后用ng-value可以给hidden input赋值.
3、AngularJS中对input的ng-model绑定和对Input的value赋值之间存在矛盾。如果绑定了model就无法对value做赋值。
4、input不做ng-model绑定,那验证输入的机制就会有问题:错误提示显示不出来。观察Scope,你会发现,那段input对应的error值根本不存在。
5、根据3和4两个条件,对表单数据做初始化最好用ng-model,对$scope的变量做初始化时,只能对一级子属性复制比如$scope.attr1,如果直接对二级属性,$scope.attr1.attr2赋值,因为第一次初始化时可能$scope.attr1这个对象实际还没有创建,会导致代码出错。
6、关于依赖的注入办法,网上有篇文章作了总结:http://www.cnblogs.com/lcllao/archive/2012/09/23/2699401.html。文章给出的依赖注入推荐方法是:
var MyController = function(dep1, dep2) {
...
}
MyController.$inject = ['dep1', 'dep2'];
MyController.prototype.aMethod = function() {
...
}
但是遗憾的是这种方法对非Provider的依赖注入是无效的,所以比较保险的方法还是AngularJS一书最开始14页给出的方法:
var myAppModule = angular.module('myApp', []);
myAppModule.controller('TextController',
function($scope) {
var someText = {};
someText.message = 'You have started your journey.';
$scope.someText = someText;
});
这个方法最麻烦的是你得在HTML的ng-app那儿加一个“myApp”此类的属性值,而且这个地方有个问题就是个你得myapp得用JS定义,否则JS运行会出错,我个人建议
var myApp = angular.module('myApp',[]);
这么一条语句要放在站点个性化定制代码的第一行。
7、ng-repeat的那个数组,直接对数据做delete array[i]处理起不到真正的删除repeat元素的作用,需要对这个数据做一次处理,然后再对scope的数组赋值,才能真正起到更新repeat数组的作用。
8、数据绑定的异步问题,关于AngularJS的数据绑定机制简短说明见:http://blog.csdn.NET/dipolar/article/details/9291117,由于这种外部监控的绑定是通过外部监控异步的实现的,如果空间取值跟在模型赋值之后是无效的:如果第一句给某input的绑定model数据做了赋值,紧接着第二句语句就用jQuery.val()这样的函数从DOM树中取input的value得到的往往不是第一句给起绑定的值,因为这个时候,angualrJS的外部绑定监控还没有开始起作用。
9、input的model不能绑定$scope的一级变量,最后做一个空对象,绑定其二级变量,在Select上绑定一级变量会得不到值。
10、由ng-repeat网页端动态生成的option列表,给select的ng-model赋值的界面反馈并不是很正常(1.2版本),可以用ng-selected="ng-model_value == ng-value"来补充修正这个界面反应bug。
11、过滤器的问题:过滤器的object的表达式不是等于过滤而是字符串包含过滤,所以等于过滤必须用function来做。
12、ng-model传递texteara value值的问题,如果只是简单写在textera元素中间,不给对应ng-model赋值,页面加载完,textera里面什么都没有,因为没给对应的ng-model变量赋值,如果直接把后台参数值传给ng-model,那么texteara中的某些特殊字符会出问题,特别是换行符,会直接导致js出错,如果后台给值加过滤,那么等传回texteara的时候,还得把这些值转换回来,否则textera中会显示很多过滤转换后的字符----这个问题在国内不少大网站上出现过。保证后端过滤和前端的反过滤彼此匹配也很麻烦,因此,有个多写几句代码的解决方案,还是把服务器的预先值放在texteara元素中间,通过jq的相关函数取得这个值,在控制器函数中把这个值传给ng-model,这样就省下了过滤转换的麻烦。其实input里也有此类问题,比如最典型的单双引号可能和元素属性定义或者JS代码冲突,不过我用Django,它的默认过滤似乎已经解决这个问题。在Java领域可以引入ESAPI这个OWASP的强悍安全库,为HTML中多种位置的模板输出提供各种过滤。
使用AngularJS开发中的几个问题的更多相关文章
- AngularJS 开发中常犯的10个错误
简介 AngularJS是目前最为活跃的Javascript框架之一,AngularJS的目标之一是简化开发过程,这使得AngularJS非常善于构建小型app原型,但AngularJS对于全功能的客 ...
- AngularJS开发中常用的写法,如:获取URL参数、路由跳转、$http、获取元素等
控制器,带状态 app.controller('editCtrl', ['$http', '$location', '$rootScope', '$scope', '$state', '$stateP ...
- AngularJS移动开发中的各种坑
捂脸,辛酸泪ing...... 本文主要涉及部分在移动设备上特有的问题. 相对来说,Jquery侧重DOM操作,AngularJS是以视图模型和双向绑定为核心的. DOM操作的问题 避免使用 jQue ...
- AngularJS移动开发中的坑汇总
使用AngualrJs开发移动App已经快半年了,逐渐积累了非常多AngularJS的问题,特别是对于用惯了Jquery的开发人员,转到AngularJS还是须要克服非常多问题的.不像Jquery那样 ...
- [转]AngularJS移动开发中的坑汇总
使用AngualrJs开发移动App已经快半年了,逐渐积累了很多AngularJS的问题,特别是对于用惯了Jquery的开发者,转到AngularJS还是需要克服很多问题的.不像Jquery那样侧重D ...
- 如何通过热修复,搞定开发中的那些 Bug?
作为程序员,Bug 修复终究是绕不开的话题,本期移动开发精英俱乐部讨论的主题便是 Bug 修复中的 Hotfix,即热修复.接下来让我们跟随大牛的脚步来了解 Hotfix,就算你不能一下豁然开朗,相信 ...
- gulp自己主动化任务脚本在HybridApp开发中的使用
眼下做前端开发的同学可能都熟悉grunt.fis之类的自己主动化构建工具.事实上在HybridApp开发中我们也能够使用这些工具来简化我们的工作.gulp就是一个比grunt,fis都先进的构建工具. ...
- 【转】angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...
- AngularJS进阶(十八)在AngularJS应用中集成科大讯飞语音输入功能
在AngularJS应用中集成科大讯飞语音输入功能 注:请点击此处进行充电! 前言 根据项目需求,需要在首页搜索框中添加语音输入功能,考虑到科大讯飞语音业务的强大能力,遂决定使用科大讯飞语音输入第三方 ...
随机推荐
- iOS开发之五:常用控件--UITextField的使用
UITextField 是iOS开发中用的非常多的一种控件,主要是供用户输入单行信息的.下面来详细介绍UITextField. 1.常用属性 <span style="font-siz ...
- 现代控制理论习题解答与Matlab程序示例
现代控制理论习题解答与Matlab程序示例 现代控制理论 第三版 课后习题参考解答: http://download.csdn.net/detail/zhangrelay/9544934 下面给出部分 ...
- mxgraph进阶(二)mxgraph的初步介绍与开发入门
mxgraph的初步介绍与开发入门 前言 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次.为此,在大师兄徐凯 ...
- Weblogic10 集群配置
1.预备知识 什么是Domain和Server Domain Domain是WebLogic Server实例的基本管理单元.所谓Domain就是,由配置为Administrator Serve ...
- Lambda的使用与实战
简介 (下面的简介也可以自己百度,一般进来的都是想知道怎么去用,所以这里主要也是重点在用法与实战上) Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替 ...
- Variant does not reference an auomation object
今天两个用户突然报错. 应用场景:审核或撤审核 字面意思:变量无法映射到对象,应该是调用对象的时候找不到.会不会是杀毒软件删除掉了. 两个用户都用了瑞星杀毒,哥不是黑,确实.应该是审核元被删掉 了. ...
- 经过一段的努力,终于成为CSDN博客专家,感谢大家支持
感谢CSDN提供这么好的一个技术学习平台,通过各路大神的博客我成长了许多,同时也感谢支持我的朋友们,我会继续努力,用心去写好博客.还请继续关注我~ 谢谢!
- AngularJS中的依赖注入
依赖注入 | Dependency Injection 原文链接: Angular Dependency Injection翻译人员: 铁锚翻译时间: 2014年02月10日说明: 译者认为,本文中所 ...
- 打包volley
1.如果电脑没有安装git和ant的话,需要安装git和ant,直接Google就可以,并配置环境变量 2.在命令行执行 git clone https://android.googlesource. ...
- RHEL6下获取安装包(RPM)而不安装的方法
RHEL6下获取安装包(RPM)而不安装的方法 有时候我们只能在某个机器上网获得RPM安装包,如何将RPM包在不能上网的内网机器安装,就需要能将安装包下载到本地而不安装,然后再把这些包复制到内网机器, ...