angualrjs 表单验证中ngview与uiview有什么区别

走进AngularJs(八) ng的路由机制
在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP。为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而ajax的一个致命缺点就是导致后退按钮失效,尽管我们可以在页面上放一个大大的返回按钮,让用户点击返回来导航,但总是无法避免用户习惯性的点后退。解决此问题的一个方法是使用 hash,监听hashchange事件来进行视图切换,另一个方法是用HTML5的history API,通过pushState()记录操作历史,监听popstate事件来进行视图切换,也有人把这叫pjax技术。基本流程如下:
如此一来,便形成了通过地址栏进行导航的深度链接( deeplinking& ),也就是我们所需要的路由机制。通过路由机制,一个单页应用的各个视图就可以很好的组织起来了。
ngRoute包括的内容
ng的路由机制是靠ngRoute提供的,通过hash和history两种方式实现了路由,可以检测浏览器是否支持history来灵活调用相应的方式。ng的路由(ngRoute)是一个单独的模块,包含以下内容:
服务$routeProvider用来定义一个路由表,即地址栏与视图模板的映射
服务$routeParams保存了地址栏中的参数,例如{id : 1, name : 'tom'}
服务$route完成路由匹配,并且提供路由相关的属性访问及事件,如访问当前路由对应的controller
指令ngView用来在主视图中指定加载子视图的区域
以上内容再加上$location服务,我们就可以实现一个单页面应用了。下面来看一下具体如何使用这些内容。
使用ng的路由机制
第一步:引入文件和依赖
ngRoute模块包含在一个单独的文件中,所以第一步需要在页面上引入这个文件,如下:
src=&http://code.angularjs.org/1.2.5/angular.min.js&&&
src=&http://code.angularjs.org/1.2.5/angular-route.min.js&&&
光引入还不够,我们还需在模块声明中注入对ngRoute的依赖,如下:
var app = angular.module('MyApp', ['ngRoute']);
完成了这些,我们就可以在模板或是controller中使用上面的服务和指令了。下面我们需要定义一个路由表。
第二步:定义路由表
$routeProvider提供了定义路由表的服务,它有两个核心方法,when(path,route)和otherwise(params),先看一下核心中的核心when(path,route)方法。
when(path,route)方法接收两个参数,path是一个string类型,表示该条路由规则所匹配的路径,它将与地址栏的内容( $location.path) 值进行匹配。如果需要匹配参数,可以在path中使用冒号加名称的方式,如:path为/show/:name,如果地址栏是/show/tom,那么参 数name和所对应的值tom便会被保存在$routeParams中,像这样:{name : tom}。我们也可以用*进行模糊匹配,如:/show*/:name将匹配/showInfo/tom。
route参数是一个object,用来指定当path匹配后所需的一系列配置项,包括以下内容:
controller //function或string类型。在当前模板上执行的controller函数,生成新的scope
controllerAs //string类型,为controller指定别名
template //string或function类型,视图所用的模板,这部分内容将被ngView引用
templateUrl //string或function类型,当视图模板为单独的html文件或是使用了 type=&text/ng-template&&定义模板时使用
redirectTo
最简单情况,我们定义一个html文件为模板,并初始化一个指定的controller:
function emailRouteConfig($routeProvider){
$routeProvider.
when('/show', {
controller: ShowController,
templateUrl: 'show.html'
when('/put/:name',{
controller: PutController,
templateUrl: 'put.html'
otherwise(params)方法对应路径匹配不到时的情况,这时候我们可以配置一个redirectTo参数,让它重定向到404页面或者是首页。
第三步:在主视图模板中指定加载子视图的位置
我们的单页面程序都是局部刷新的,那这个&局部&是哪里呢,这就轮到ngView出马了,只需在模板中简单的使用此指令,在哪里用,哪里就是&局部&。例如:
我们的子视图将会在此处被引入进来。完成这三步后,你的程序的路由就配置好了。
用Route去战斗吧!
光看了上面的理论部分是不是觉得很抽象、不过瘾呢?为了满足大家的胃口,同时也巩固我学到的东西,我特地写了一个demo,模拟我们熟悉的新闻发布,使用了上面所介绍的知识。下面由demo华丽丽登场:
& 大标题和左侧部分都是不变的,只是右侧的内容在动态加载。并且每次切换不同的视图,浏览器地址栏的内容都相应变化,所以当你点击后退时,总是能回到上一步的视图。
由于博客的限制你在这里看不到地址栏变化,点击 /show/r72hgjwg 查看真实运行效果。
查看demo的,点击这里 /code/r72hgjwg
关于ng的路由机制就学习到这里的,总结一下,其实路由机制也不难,基本流程就是这样,但在没有真正用到项目中前,我也不知道这水到底有多深。 本篇博客中的示例我抛弃了jsfiddle.net而用了,原因是jsfiddle简直慢的像蜗牛,并且angular.js的cdn貌 似被墙了,文件一直下载不下来。
总体感觉还是挺快的,就是一点不方便,你看源码还得切出去,木有办法啦,以后我发现更好的再把runjs 给抛弃了~
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'26419人阅读
Iphone开发心得(10)
&&&&&& 前面说过UIViewController,但是UIView也是在MVC中非常重要的一层&。正是因为UIView是Iphone下所有界面的基础,所以官方专门写了一个文档“View&Programming&Guide&for&iOS”。通过这个可以很好的了解UIView的功能。
&&&&&&& 先来看看官方API的解释:The&UIView&class&defines&a&rectangular&area&on&the&screen&
and&the&interfaces&for&managing&the&content&in&that&area.
&At&runtime,&a&view&object&handles&the&rendering&of&any&content&in&its&area
&and&also&handles&any&interactions&with&that&content.(UIView在屏幕上定义了一个矩形区域和管理区域内容的接口。在运行时,一个视图对象控制该区域的渲染,同时也控制内容的交互。)。所以说UIView具有三个基本的功能,画图和动画,管理内容的布局,控制事件。正是因为UIView具有这些功能,它才能担当起MVC中视图层的作用。
&&&&&&&& UIView咋看起来很复杂,官方API中各种函数接口,要学过运用庖丁解牛的思想,逐个分析,因为再复杂的东西都是有简单的东西构成的。回到刚才提到的UIView的三个基本功能就可以容易的分离出UIView不同的功能是怎么组合起来的。首先看视图最基本的功能显示和动画,其实UIView的所有的绘图和动画的接口,都是可以用CALayer和CAAnimation实现的,也就是说苹果公司是不是把CoreAnimation的功能封装到了UIView中,这个文档中没有提到过,也没法断言。但是每一个UIView都会包含一个CALayer,并且CALayer里面可以加入各种动画。再次我们来看UIView管理布局的思想其实和CALayer也是非常的接近的。最后控制事件的功能,是因为UIView继承了UIResponder。经过上面的分析很容易就可以分解出UIView的本质。UIView就相当于一块白墙,这块白墙只是负责把加入到里面的东西显示出来而已。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图1
1.UIView中的CALayer
&&&&&&&& &UIView的一些几何特性frame,bounds,center都可以在CALayer中找到替代的属性,所以如果明白了CALayer的特点,自然UIView的图层中如何显示的都会一目了然。
&&&&&&&&& CALayer就是图层,图层的功能自然就有渲染图片,&播放动画的功能。每当创建一个UIView的时候,系统会自动的创建一个CALayer,但是这个CALayer对象你不能改变,只能修改某些属性。所以通过修改CALayer,不仅可以修饰UIView的外观,还可以给UIView添加各种动画。CALayer属于CoreAnimation框架中的类,通过Core&Animation&Programming&Guide就可以了解很多CALayer中的特点,假如掌握了这些特点,自然也就理解了UIView是如何显示和渲染的。
&&&&&&&&& 先来看下Core&Animation框架中关于layer的解释:While&there&are&obvious&similarities&between&Core&Animation&layers&and&Cocoa&views&the&biggest
&conceptual&divergence&is&that&layers&do&not&render&directly&to&the&screen.
Where&NSView&and&UIView&are&clearly&view&objects&in&the&model-view-controller&design&pattern,
&Core&Animation&layers&are&actually&model&objects.&They&encapsulate&geometry,&timing&and&visual&properties,
&and&they&provide&the&content&that&is&displayed,
&but&the&actual&display&is&not&the&layer’s&responsibility.
Each&visible&layer&tree&is&backed&by&two&corresponding&trees:&a&presentation&tree&and&a&rend&tree(非常相似的cocoa视图和core&Animation层最大的区别是core&Animation不能直接渲染到屏幕上。UIView和NSView明显是MVC中的视图模型,animation&layer更像是模型对象。他们封装了几何,时间和一些可视的属性,并且提供了可以显示的内容,但是实际的显示并不是layer的职责。每一个层树的后台都有两个响应树:一个曾现树和一个渲染树)。所以很显然Layer封装了模型数据,每当更改layer中的某些模型数据中数据的属性时,曾现树都会做一个动画代替,之后由渲染树负责渲染图片。
&&&&&&& 既然Animation&Layer封装了对象模型中的几何性质,那么如何取得这些几何特性。一个方式是根据Layer中定义的属性,比如bounds,authorPoint,frame等等这些属性,其次,Core&Animation扩展了键值对协议,这样就允许开发者通过get和set方法,方便的得到layer中的各种几何属性。下表是Transform的key&paths。例如转换动画的各种几何特性,大都可以通过此方法设定:
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@&transform.rotation.x&];
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&& 虽然CALayer跟UIView十分相似,也可以通过分析CALayer的特点理解UIView的特性,但是毕竟苹果公司不是用CALayer来代替UIView的,否则苹果公司也不回设计一个UIView类了。就像官方文档解释的一样,CAlayer层树是cocoa视图继承树的同等物,它具备UIView的很多共同点,但是Core&Animation没有提供一个&方法展示在窗口。他们必须宿主到UIView中,并且UIView给他们提供响应的方法。所以UIReponder就是UIView的又一个大的特性。
2.UIView继承的UIResponder
&&&&&& UIResponder是所有事件响应的基石,官方也提供了一个重要的文档给开发者参考”Event&Handling&Guide&for&iOS”。
&&&&& &事件(UIEvent)是发给应用程序,告知用户的行动的。在IOS中事件有三种事件:多点触摸事件,行动事件,远程控制事件。三种事件定义如下:
typedef enum {
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
} UIEventT
&&&&& &再来看下UIReponder中的事件传递过程,如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图3
首先是被点击的该视图响应时间处理函数,如果没有响应函数就逐级的向上面传递,直到有响应处理函数,或者该消息被抛弃。至于苹果公司是如何让事件消息这样流动的,在下面的分析中,可以了解一些,至于深层的原理还的进一步挖掘。
&&&&&&& 这里重点看三个事件&中的多点触摸事件,也就是UITouch事件,下图是UIEvent中封装的UITouch内容
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图4
&&&&&&&&& 关于UIView的触摸响应事件中,这里有一个常常容易迷惑的方法hitTest:WithEvent。先来看官方的解释:This&method&traverses&the&view&hierarchy&by&sending&the&pointInside:withEvent:&message&
to&each&subview&to&determine which&subview&should&receive&a&touch&event.&
If&pointInside:withEvent:&returns&YES,&then&the&subview’s&hierarchy&is&
&otherwise,&its&branch&of&the&view&hierarchy&is&ignored.
&You&rarely&need&to&call&this&method&yourself,&
but&you&might&override&it&to&hide&touch&events&from&subviews.(通过发送PointInside:withEvent:消息给每一个子视图,这个方法遍历视图层树,来决定那个视图应该响应此事件。如果PointInside:withEvent:返回YES,然后子视图的继承树就会被遍历;否则,视图的继承树就会被忽略。你很少需要调用这个方法,仅仅需要重载这个方法去隐藏子视图的事件)。从官方的API上的解释,可以看出&hitTest方法中,要先调用PointInside:withEvent:,看是否要遍历子视图。如果我们不想让某个视图响应事件,只需要重载PointInside:withEvent:方法,让此方法返回NO就行了。不过从这里,还是不能了解到hitTest:WithEvent的方法的用途。
&&&&&&&& 下面再从”Event&Handling&Guide&for&iOS”找答案,Your&custom&responder&can&use&hit-testing&to&find&the&subview&or&sublayer&of&itself&that&is&&under”&a&touch,&and&then&handle&the&event&appropriately。从中可以看出hitTest主要用途是用来寻找那个视图是被触摸了。看到这里对hitTest的调用过程还是一知半解。我们可以实际建立一个工程进行调试。建立一个MyView里面重载hitTest和pointInside方法:
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
[super hitTest:point withEvent:event];
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
NSLog(@&view pointInside&);
return YES;
然后在MyView中增加一个子视图MySecondView也重载这两个方法&&
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
[super hitTest:point withEvent:event];
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
NSLog(@&second view pointInside&);
return YES;
&&&&&&& 这里注意[super&hitTest:point&withEvent:event];必须要包括,否则hitTest无法调用父类的方法,这样就没法使用PointInside:withEvent:进行判断,那么就没法进行子视图的遍历。当去掉这个语句的时候,触摸事件就不可能进到子视图中了,除非你在方法中直接返回子视图的对象。这样你在调试的过程中就会发现,每次你点击一个view都会先进入到这个view的父视图中的hitTest方法,然后调用super的hitTest方法之后就会查找pointInside是否返回YES如果是,则就把消息传递个子视图处理,子视图用同样的方法递归查找自己的子视图。所以从这里调试分析看,hitTest方法这种递归调用的方式就一目了然了。
&&&&&&&&这个只是说了调试中吻合官方文档中解释的部分,但是还有一个问题,就是每个view中hitTest总要调用三个,这个查找了API和很多资料都没有找到解决的方法,然后google了以下在overflowstack中发现了有人这样解释:There&are&indeed&3&calls&to&hitTest.&It&is&not&clear&why,
&but&we&can&surmise&by&the&timestamps&on&the&event
&that&the&first&two&calls&are&to&do&with&completing&the&previous&gesture&-
&those&timestamps&are&always&very&close&to&whenever&the&previous&touch&happened,&
and&will&be&some&distance&from&the&current&time.&&&(确实有3次调用hitTest,不清楚为什么,但是前两次调用时里面的UIEvent中的timestamps属性和上一次已经完成的手势有关。这些时间timestamps是如此的接近无论先前的触摸什么时候发生,并且和系统当前的时间有一定的间隔)。看到这里我想到了,”Event&Handling&Guide&for&iOS”中曾经解释,如何区分单击和双击的区别,用的方法很简单,代码如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *aTouch = [touches anyObject];
if (aTouch.tapCount == 2) {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *theTouch = [touches anyObject];
if (theTouch.tapCount == 1) {
NSDictionary *touchLoc = [NSDictionary dictionaryWithObject:
[NSValue valueWithCGPoint:[theTouch locationInView:self]] forKey:@&location&];
[self performSelector:@selector(handleSingleTap:) withObject:touchLoc afterDelay:0.3];
} else if (theTouch.tapCount == 2) {
// Double-tap: increase image size by 10%&
CGRect myFrame = self.
myFrame.size.width += self.frame.size.width * 0.1;
myFrame.size.height += self.frame.size.height * 0.1;
myFrame.origin.x -= (self.frame.origin.x * 0.1) / 2.0;
myFrame.origin.y -= (self.frame.origin.y * 0.1) / 2.0;
[UIView beginAnimations:nil context:NULL];
[self setFrame:myFrame];
[UIView commitAnimations];
- (void)handleSingleTap:(NSDictionary *)touches {
// Single-tap: decrease image size by 10%&
CGRect myFrame = self.
myFrame.size.width -= self.frame.size.width * 0.1;
myFrame.size.height -= self.frame.size.height * 0.1;
myFrame.origin.x += (self.frame.origin.x * 0.1) / 2.0;
myFrame.origin.y += (self.frame.origin.y * 0.1) / 2.0;
[UIView beginAnimations:nil context:NULL];
[self setFrame:myFrame];
[UIView commitAnimations];
&&&&&&& 所以区别这两个手势的思想,就是判断tapcount如果发现touchEnd的时候tapcount是2就取消第一次执行的动作。但是这一点是否想过,苹果公司是如何判断tapcount的,比如说我在屏幕上按了下去,过了一分钟后松开,那么在touchEnd方法中捕捉到的touch事件和我点击一下屏幕就起来一样么?答案是不一样的,可以写程序亲自试验以下,按下去一分钟再松开,这里没必要一分钟了,就几秒也足够了,你会发现再touchEnd中tapCount为0,而点击一下松开的tapCount为1。还有一种情况就是双击,如果我双击间隔的时间超过大概4,5秒钟,再次侦测touchEnd中的tapCount就会发现是1,而正常的双击tapCount为2。这里和hitTest执行三次,并且前两次记录的时间是上一次触摸手势的时间,后一次才是本次触摸手势的时间,有没有关系,官方没有任何解释,这里也只能臆测。是不是用来区分上面所说的情况,也就是说根据这个事件timestamp来改变UITouch中tapCount的次数,还希望那位高手给予解释。所以上面提到的UIEvent,这个事件为何能向苹果官方解释的那样流动,这里也就可见一斑了。
&& 最后推荐俩本iphone开发的书籍,非常适合初学者使用。一本是iphone开发秘籍,另外一本是Core.AnimationSimplified。我的空间里有这两本书的资源,不过都是英文原本的,有兴趣的可以看下(,)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:261723次
积分:2795
积分:2795
排名:第9913名
原创:16篇
转载:14篇
译文:16篇
评论:72条
(1)(1)(2)(1)(2)(2)(6)(3)(2)(7)(3)(1)(4)(5)(1)(2)(3)[angular]AngularJS 在实际应用中有哪些优缺点?_angular-牛宝宝文章网
[angular]AngularJS 在实际应用中有哪些优缺点? angular
[angular]AngularJS 在实际应用中有哪些优缺点?我们在实际应用中总会出现这样或那样的现实场景,当然,大家在运用AngularJS的过程中也会碰到这样那样的问题。说说你在应用AngularJS过程中的感受下面就看看www.niubb.net小编为您搜集整理的参考答案吧。网友徐海峰对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:谢谢邀请!背景:我们是今年做 Worktile的时候使用Angular.js的,当时技术选型的时候是准备使用 Backbone.js的,毕竟有很多大公司在使用它,但是实际使用中发现,Backbone太费劲(具体的详细比较我就不说了),偶然发现了Angular.js,顿时被他的模板语言所吸引。优点:1. 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令;2. 是一个比较完善的前端MV*框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能;3. 自定义Directive,比jQuery插件还灵活,但是需要深入了解Directive的一些特性,简单的封装容易,复杂一点官方没有提供详细的介绍文档,我们可以通过阅读源代码来找到某些我们需要的东西,如:在directive使用 $parse;4. ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助,我们的项目从上线到目前,UI变化很大,在摸索中迭代产品,但是js的代码基本上很少改动。5. 补充:Angular支持单元测试和e2e-testing。缺点:1. 验证功能错误信息显示比较薄弱,需要写很多模板标签,没有jQuery Validate方便,所以我们自己封装了验证的错误信息提示,详细参考 why520crazy/w5c-validator-angular ? GitHub;2. ngView只能有一个,不能嵌套多个视图,虽然有 angular-ui/ui-router ? GitHub解决,但是貌似ui-router 对于URL的控制不是很灵活,必须是嵌套式的(也许我没有深入了解或者新版本有改进);3. 对于特别复杂的应用场景,貌似性能有点问题,特别是在Windows下使用chrome浏览器,不知道是内存泄漏了还是什么其他问题,没有找到好的解决方案,奇怪的是在IE10下反而很快,对此还在观察中;4. 这次从1.0.X升级到1.2.X,貌似有比较大的调整,没有完美兼容低版本,升级之后可能会导致一个兼容性的BUG,具体详细信息参考官方文档 AngularJS,对应的中文版本:Angular 1.0到1.2 迁移指南5. ng提倡在控制器里面不要有操作DOM的代码,对于一些jQuery 插件的使用,如果想不破坏代码的整洁性,需要写一些directive去封装插件,但是现在有很多插件的版本已经支持Angular了,如:jQuery File Upload Demo6. Angular 太笨重了,没有让用户选择一个轻量级的版本,当然1.2.X后,Angular也在做一些更改,比如把route,animate等模块独立出去,让用户自己去选择。当然使用的人多才会暴露更多的问题,一起为这些问题寻找解决方案是一个社区的良性趋势,选择Angular,的确使我们的开发效率大大提高。网友破狼对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:angular是个比较好的框架,说缺点的话。不适合类型开发:1:内容网站,需要SEO的。(SEO目前也有了prerender解决方案) https//prerender.io2:交互频繁的,如游戏之类交互体验网站。3,太过于简单的页面。Angular更适合于CRUD的管理系统开发。网友假装在编程对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:knockout看着你。。。网友蒙面大侠对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:与传统JQ思维方式不同,会出现很多理解上面的冲突。谈一个我遇到过的坑。当用户操作某个input,改变了某个值,这个值需要在另一个地方显示,所以在angular绑定中,改变input的同时,另一个地方的显示也会跟着变。那么问题来了,当我不需要另一个地方的显示跟着变,而是需要用户点击某个buttom之后再变,那我就需要两个变量来存储这个值。事实上这只是同一个值,只是我不需要立马显示在页面上罢了。正常思维中,这个值只是一个值,我什么时候需要显示,是JS的事情,所以我只需要一个变量来存。在Angular中,由于我要延迟显示,我需要一个变量来做缓存,等到需要显示的时候再去显示。页面绑定非常厉害,厉害到需求发生变化的时候,你会发现各个数据全都是绑定着的,牵一发动全身,然后就要进行解绑、绑定新数据、解绑后是否会引起其他地方的bug等诸多问题。如果与backbone进行比较,页面渲染时的数据交给模板插件,页面渲染结束后的与用户进行交互方面的逻辑交给JS,我可以在不改变model的情况下改变页面上的内容,更灵活。当然在很多人眼里,这些只是小瑕疵,无法掩盖它的优势。成也绑定,败也绑定。Angular的优势,很多方面backbone也有,如模块化、MVC分离、SPA(single page application),在交互方面,backbone更加灵活。当然在我眼里,拼了命地绑定绑定,让我觉得HTML和JS的耦合性太高,写起代码来很累。网友周密对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:我在用 AngularJS 逐步改写一个 Adobe AIR 项目,原项目采用 HTML + JavaScript 编写。最大的好处就在于双向绑定,非常适合于 GUI 客户端项目的开发。其他的特性,比如模板、指令对于界面的渲染逻辑也能起到简化作用。:最根本的改善就在于 MVC的引入,适合于交互较多的客户端项目。网友彭晓对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:这个一定要怒答一记关于优点:绑定,绑定,还是绑定(刚爽完了不回答一下感觉心里都不舒服有没有)恩,实例说话刚才,几分钟前,有一个基础的model要改。具体如下"profile" : {"name": "","email": "","street" : "","city" : "","state" : "","zip" : ""}=&&&&"profile" : {"name": "","email": ""},"address" : {"street" : "","city" : "","state" : "","zip" : ""}网友杨帆对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:开发学习类的网站,考试一类的应用需要和用户进行大量交互,里面的ng-show ng-class等api可以将脚本植入html中。用数据来驱动表现。网友王力澜对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:很多喜欢尝鲜并不能掌握angularjs的人和依靠生态系统盈利的人在使用这个框架.网友王辉军对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:除了 Angular 标榜的声明式、双向绑定、指令等特性外,体会最深的是 Angular 能够将关注点分离的非常彻底。服务层(Ajax 请求)- 业务层(Controller)- 展现层(HTML 模板)- 交互层(animation)。在最近的项目中,为了增加交互效果,通过 animation 服务完全将交互动画的逻辑独立了出来,而业务逻辑里完全没有交互逻辑,分离的非常彻底。拿掉 anmation 一层,应用完全没有影响,只是少了各种动画。而展现层的改动,也不需要修改 controller,只需要修改模板,根据实际需求,还可以进一步分割,对于项目的生产效率有很大提高。说到缺点,目前觉得:1.开发人员思想的转变,jQuery 的思想太根深蒂固了,很多时候两者混合会让人精神分裂。。要深刻理解 Angular 的思路,抛弃 jQuery 的影响,需要较长时间的转变;2.学习曲线陡峭,在没有接受这种思路时,会觉得处处是坑,尤其是作用域的嵌套,是较难理解和容易出 bug 的地方,还有自定义指令,也容易引起 $scope 的问题,完全掌握之后,才能体会到好处;3.常说的性能问题,但这一点通常只是基于脏检查的方法,自己没做过不同框架的具体性能对比,只是觉得还是要考虑具体的应用场景;4.单页应用有很多需要视图嵌套,官方的 router,需要使用 ui-router。网友方愚对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:请谨慎用来开发移动端的Webapp,太大,性能差,破坏很多优化规则。
开发hybrid 应用神器。
好的框架是能让一般程序员写出可以跑起来的代码,AngularJS是个好框架。网友蒙面大侠对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:angularjs是否有应用在电商类平台开发较为成功的案例?网友李城进对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:实际的在项目中使用了,在某些地方确实能提高效率,但是在一些修改dom元素的地方又感觉不太直接,用jquery 就能很简单解决的地方在angular中就感觉实现着很别扭。框架太重了!目前来看不建议在手机端使用,真的,在ios还行,但是在配置低的android上效果不好。 很多为了提升用户体验的优化用不上了。。。。感觉还是不太成熟。。还需要成长国内目前的资料有限,需要翻墙去看,发现就算是关外在使用angular的那些网站也是很谨慎的在使用,mvvm确实会节省一些时间,但是写一些很复杂的功能时,考虑的东西会很多,写着写着就会感觉乱,不知道数据是在哪个位置出现了错误,写到后来发现跟以前使用的方法相比并没太大的时间差距,目前在ie7上还不清楚如何去兼容网友Yi Zhang对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:觉得不错网友付轶对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:还在学习中网友蒙面大侠对[angular]AngularJS 在实际应用中有哪些优缺点?给出的答复:相比其他前端mvc框架, angualr的优点是绑定, 而且绑定的语法很简单, 简单到你不用写js代码缺点是绑定, 一不小心, 绑太多了,能卡死的页面半天出不来 O(∩_∩)O哈哈~适合对体验要求不高, 要降成本的管理台应用, 其他的算了吧欢迎您转载分享:
更多精彩:

我要回帖

更多关于 angualr js 的文章

 

随机推荐