使用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应用中集成科大讯飞语音输入功能 注:请点击此处进行充电! 前言 根据项目需求,需要在首页搜索框中添加语音输入功能,考虑到科大讯飞语音业务的强大能力,遂决定使用科大讯飞语音输入第三方 ...
随机推荐
- linux后台运行程序(secureCRT断掉或关闭后继续运行程序)
secureCRT断掉后想继续运行程序.也就是程序会在后台一直执行到结束. secureCRT通过ssh联接到client端运行程序,如果关掉窗口或者断开连接时,任务会被kill. 为了程序能够后台执 ...
- Eclipse中查看没有源码的Class文件的方法
本文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常 ...
- Java中常用的正则表达式
常用的正则表达式 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的 ...
- Linux之使用网络
Linux有好多命令可以让你方便的使用网络,常见的有ssh,rsync,wget,curl等等,但是telnet等方式并不适用于网络交互的使用,因为它会暴露你的用户名密码等.所以一般使用安全的命令来进 ...
- JavaScript压缩工具JSA使用介绍
JavaScript压缩工具JSA使用介绍 JSA绝对是我使用过的JS压缩工具中最上乘的一个.认识它是从ligerUI开始.在ligerUI的QQ讨论组里,大神--ligerUI的作者告诉我他的lig ...
- 使用github管理你的代码
关于为什么使用github,网上已经有很多讨论了.当然选择还有google code, Bitbucket,sourceforge.github有如下优势: 1. github更有利于开源项目的发展 ...
- 使用go reflect实现一套简易的rpc框架
go jsonrpc 在实际项目中,我们经常会碰到服务之间交互的情况,如何方便的与远端服务进行交互,就是一个需要我们考虑的问题. 通常,我们可以采用restful的编程方式,各个服务提供相应的web接 ...
- UIView、UIViewLayout UI_01
1.首先:在UI里面我们使用的是MRC,需要把ARC改成NO: 若学习比较吃力,可以先学习一下基础: http://blog.sina.com.cn/s/blog_814ecfa90102vuzg.h ...
- C++对象模型(二):The Semantics of Copy Constructors(拷贝构造函数之编译背后的行为)
本文是 Inside The C++ Object Model's Chapter 2 的部分读书笔记. 有三种情况,需要拷贝构造函数: 1)object直接为另外一个object的初始值 2)ob ...
- 跨平台移动APP开发进阶(四)AngularJS简介
AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件. 它的创新点在于,利用 数据绑定 和 依赖注入 ...