angular使用总结
一.是否有必要加入模块化框架
1.Reqruiejs seajs的主要作用
(1)模块化,让代码易于维护。
- angular本身就是mvc,模块化很清晰,所以这点用不到requirejs
(2)可以按需、并行、延时载入js库
- 当js文件比较多时,angular会一次请求所有的js文件,浪费流量,此时模块化框架就很有必要了。
2.http://www.cnblogs.com/kenkofox/p/4643760.html(浅谈HTML5单页面架构(一)——requirejs + angular + angular-route
二.是否有必要加入jquery
1.dom操作:angular推荐dom操作在自定义指令里面,在controller里面操作dom对性能有影响,angular自带jqlite对一般的dom操作足够用。
2.Bootstrap依赖jquery:可以用Bootstrap的css功能加angular-ui的js组件。
3.http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background(介绍为什么angular不需要引入jquery)
三.性能优化
1.dom操作,尽量不要在controller里操作都没,有dom操作的尽量在自定义指令的link函数中。
2.$scope.$apply()vs$scope.$apply(function(){})
DOM事件、setTimeout、XHR时必须需要调用。
- function$apply(expr) {
- try {
- return$eval(expr);
- } catch(e) {
- $exceptionHandler(e);
- } finally {
- $root.$digest();
- }
- }
复制代码它会捕获所有的异常并且不会再抛出来,最后都会调用$digest()方法。
总之尽量使用$scope.$apply(function(){})
3.ng-show vs ng-if
Ng-show 单纯的隐藏dom元素 ng-if清楚dom元素,ng-if性能要好一些。
4.ng-repeat
Error: [ngRepeat:dupes]
.当数组中有两个以上数字重复时会报这个错,可以通过item in items track by $index解决
当数组部分数据发生变化时,如果没有track by,angular会刷新和此数据有关的所有dom元素,而加了track by后angular只会刷新数据有变化的dom元素,减少不必要渲染。
5.减少不必要的双向绑定,最好不要超过2000个数据双向绑定。{{:: mes}}
6.减少事件广播,使用双向数据绑定或共享service等方法来代替。
7.http://ourjs.com/detail/54a0b5cd71caa3b40a000001(angular在AngularJS在大型单页面应用中的性能优化)
四.遇到的坑
1.路由
虚拟路由a下子路由b的变化不能控制和a一级的ui-view中的内容。
2.点击某个标签控制路由跳转有两种方式如下
(1)通过a标签的href属性跳转 <a href="#cart">购物车</a>
(2)通过ui-router的方式跳转 <a ui-sref="cart">购物车</a>
两种在router.js做如下编码都可以跳转
- $stateProvider
- .state("cart", {
- url: "/cart",
- templateUrl: "template/cart.html",
- });
但是当改变router.js中url为“/cart1”时第一种跳转方式失效,第二种依然可以跳转。原因是第一种只能对应固定的url。第二种是对象cart这个状态。所以在实际应用中不要使用第一种跳转方式。
3.controller中的代码执行两遍,原因是在模板和路由中同时设定了controller,如下。
- //cart.html
- <div ng-controller="cartCtr">我是购物车模板文件</div>
- //router.js
$stateProvider
- .state("cart", {
- url: "/cart",
- templateUrl: "template/cart.html",
controller:"cartCtr"- });
4.开发环境vs生产环境
(1).开发环境下如果使用压缩版的angular如果某个js文件报错很难找到,所有开发环境下务必使用未压缩版本。
(2).上线应该用gulp对代码进行压缩混淆合并等处理,减小文件体积,减少跟服务器请求资源的次数。
未完待续
自定义鼠标右键指令
- //指令里面
angular.directive('myRightClick', function($parse) {- return function(scope, element, attrs) {
- element.bind('mousedown', function(event) {
- if(event.button==2){
- scope.$eval(attrs.myRightClick);
- }
- });
- };
- });
//html
<div my-right-click="fn()"></div>
//controller
$scope.fn=function(){
console.log(111);
}
5.$state 传参
- //路由配置时加上params参数
- $stateProvider.state('login', {
- url: '/login',
- params:{'isScanning':false},
- views: {
- 'webIndexView': {
- templateUrl: 'pages/login.view.html',
- controller: 'loginController'
- }
- }
- })
//跳转路由时
$state.go('login',{'isScanning':true});- //controller中注入$stateParams
console.log($stateParams.isScanning);
angular使用总结的更多相关文章
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- TypeScript: Angular 2 的秘密武器(译)
本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...
- angular实现统一的消息服务
后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...
- div实现自适应高度的textarea,实现angular双向绑定
相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...
- Angular企业级开发-AngularJS1.x学习路径
博客目录 有链接的表明已经完成了,其他的正在建设中. 1.AngularJS简介 2.搭建Angular开发环境 3.Angular MVC实现 4.[Angular项目目录结构] 5.[SPA介绍] ...
- Angular企业级开发(4)-ngResource和REST介绍
一.RESTful介绍 RESTful维基百科 REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来 ...
- Angular企业级开发(3)-Angular MVC实现
1.MVC介绍 Model-View-Controller 在20世纪80年代为程序语言Smalltalk发明的一种软件架构.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并 ...
- Angular企业级开发(2)-搭建Angular开发环境
1.集成开发环境 个人或团队开发AngularJS项目时,有很多JavaScript编辑器可以选择.使用优秀的集成开发环境(Integrated Development Environment)能节省 ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
随机推荐
- maven报错非法字符:\65279 错误
开发中一个项目很早就报这个错,maven报错非法字符:\65279 错误,今天终于忍无可忍要解决它 :编译java文件的时候,有些java文件报非法字符 \65279错误,在网上找和很多 方法,也试了 ...
- IOS第四天-新浪微博 -存储优化OAuth授权账号信息,下拉刷新,字典转模型
*************application - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- iOS开发中手机号码和价格金额有效性判断及特殊字符的限制
在实际开发过程中,经常会遇到些不能让用户随便地输入手机号码,对输入的手机号码的正确判断:有些输入框只能输入数字,不能输入字母或特殊字符:还有些如价格金额之类的就只能输入数字和小数点且小数点后面保留两位 ...
- C语言中的sizeof()
sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但当我总结的时候才发现,这个 ...
- 导向矢量(Steering Vector)
导向矢量是阵列天线的所有阵元对具有单位能量窄带信源的响应. 由于阵列响应在不同方向上是不同的,导向矢量与信源的方向是相互关联的,这种关联的独特性依赖于阵列的几何结构.对于同一阵元阵列,导向矢量的每一个 ...
- es6入门教程完整版
ECMAScript 6入门 <ECMAScript 6入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性. 作者:阮一峰 授权:署名-非商用 ...
- 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)
这章的书写感觉很普通,是些基础的认知知识. 其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱. 再说点书上没有的.本来这些知识我打算另外分 ...
- jquery中bind()绑定多个事件
bind()绑定事件 $(selector).bind(event,data,function): 参数event为事件名称(如"click,mouseover....."),da ...
- let命令
基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调 ...
- ClickOnce部署
(1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋 ...