如何视野是衡量一个人人的 AngularJS 水平

angularjs条件判断_angularjs 条件判断_壮志凌云
angularjs 条件判断
以下内容已过滤百度推广
isemptyobject: function( obj ) {
for ( var name in obj ) {
} 这是jquery 判断空对象的方法,可以借鉴...&&百度知道
angularjs的表达式功能比较弱,不支持条件判断和流程控制,不过好在支持过滤器,这就一定程度上弥补了这个缺憾。过滤器是个很有趣的特性,让人想起了管道编程。到这里,...&&普通
我搜你为用户提供最专业、最及时的angularjs 条件判断相关问题解决方案及其他相关信息,解决当前用户最关心的angularjs 条件判断问题.&&普通
日&-&源码剖析:其实就是把angularjs特有的{{}}符号替换掉,里面的内容接着在转成js继续处理,所以里面的表达式各种你都可以使用js特有的属性啊,内置函数啊操...&&普通
与javascript 表达式不同,angularjs 表达式可以写在 html 中。与javascript 表达式不同,angularjs 表达式不支持条件判断,循环及异常。...&&普通
日&-&执行表达式时,angularjs能够允许undefined或者null,不像javascript会抛出一个异常
不能在angularjs表达式中使用“条件判断”、“循环”、“抛出异常...&&普通
angularjs 提供了一个类似jquery的$.ajax的对象,用于异步请求。 在angularjs中对...我想对其绑定的对象进行判断,值不同,在table中展示不通的中文,谢谢 回复 向...&&普通
angularjs 中 ng-if 能不能进行多条件判断?【珠海】第52期源创会报名开始!&&& >>
angularjs 中的ng-if 能不能像 javascript 中 判断语句 if(a=='1'...&&普通
angularjs+条件判断 相关文章您是否还在烦恼如何没有困难地创建一个创新型的web应用程序?那么一定不要错过这个集合!在本文中,小编为大家收集了十个非常棒的angular...&&普通
日&-&没有控制结构: 你不能在angularjs表达式中使用“条件判断”、“循环”、“抛出异常”等控制结构。 过滤器(类似unix中的管道操作符): 你可以通过过滤器...&&普通
语义关联近似词猜&正规性45地理位置网址标题|网址|摘要F0略略分类信息&|&猜&非正规中略略略精确匹配1略略分类信息&|&猜&非正规中略略略精确匹配2略略分类信息&|&猜&非正规中略略略精确匹配3略略分类信息&|&猜&非正规中略略略精确匹配4略略分类信息&|&猜&非正规中略略略精确匹配5略略分类信息&|&猜&非正规中略略略精确匹配6略略分类信息&|&猜&非正规中略略略精确匹配7略略分类信息&|&猜&非正规中略略略精确匹配8略略分类信息&|&猜&非正规中略略略精确匹配9略略分类信息&|&猜&非正规中略略略部分匹配10
12时间限制猜&实时动态5相关检索词泛时效性8F1略略略略百度知道略略略1略略略略略略略略2略略略略略略略略3略略略略略略略略4略略略略略略略略5略略略略略略略略6略略略略略略略略7略略略略略略略略8略略略略略略略略9略略略略略略略略10
url2345摘要前标题后标题F2略略略略略略略1略略略略略正文略2略略略略略略略3略略略略略正文略4略略略略略正文略5略略略略略正文略6略略略略略正文略7略略略略略正文略8略略略略略正文略9略略略略略正文略10
123原创猜&网址形式6相关词猜&相似度F3略略略略子页优先级较低略略精确匹配1略略略略主页次优先&|&子页内容充实略略精确匹配2略略略略子页优先级较低略略精确匹配3略略略略子页优先级较低略略精确匹配4略略略略主页次优先&|&子页内容充实略略精确匹配5略略略略主页次优先&|&子页内容充实略略精确匹配6略略略略主页次优先&|&子页内容充实略略精确匹配7略略略略子页优先级较低略略精确匹配8略略略略子页优先级较低略略精确匹配9略略略略主页次优先&|&子页内容充实略略D10如何衡量一个人英语口语水平高低
衡量一个人口语水平高低主要看以下几个方面:1.语音、语调是否正确,口齿是否清楚;2.流利程度;3.语法是否正确,用词是否恰当,是否符合英语表达习惯;4.内容是否充实,逻辑是否清楚.这些是衡量会话能力的主要标准.针对以上标准,采取相应的训练方法,大致可分作两个阶段.第一阶段:准备阶段,主要是进行模仿.背诵.复述练习.目的是训练正确的语音.语调.提高流利程度,培养英语语感.同时,通过各种方式,如阅读.做练习题,听英语磁带,看英语录像和电影等,来扩大词汇量.掌握英语的习惯表达方式,扩大知识面和训练英语逻辑思维能力,准备会话前,要对常用的词(组)、短语等熟练掌握,“熟练”是与人会话的前提,只有熟练,在会话时才能流利.熟练的标准就是要达到不加思索地脱口而出.第二阶段:实践阶段,主要进行大量的会话练习,与他人对话、讨论,基础好的可练习口译,自己讲英语故事等等.(一)模仿模仿是学习外语主要方法之一,模仿的原则:一要大声模仿.这一点很重要,模仿时要大大方方,清清楚楚,一板一眼,口形要到位,不能扭扭捏捏,小声小气地在嗓眼里嘟嚷.刚开始模仿时,速度要慢些,以便把音发到位,侍把音发准了以后,再加快速度.直到能用正常语速把句子轻松他说出来,脱口而出.大声模仿的目的是使口腔的肌肉充分活动起来,改变多年来形成的肌肉的习惯运动模式(汉语发音的运动模式),使嘴与大脑逐渐协调起来,建立起新的口腔肌肉的运动模式(英语发音的运动模式).若在练习时总是小声在嗓眼里嘟嗓,一旦需要大声说话时,就可能发不准音,出现错误.二要随时都准备纠正自己说不好的单词.短语等.有了这种意识,在模仿时就不会觉得单调.枯燥,才能主动.有意识,有目的地去模仿,这种模仿才是真正的模仿,才能达到模仿的目的,也就是要用心揣摩、体会.三要坚持长期模仿.一般来说,纯正.优美的语音、语调不是短期模仿所能达到的,对于有英国英语基础的人学说美国英语是如此,对于习惯于说汉语的人学说英语更是如此.过度需要一段时间,时间的长短取于自学者的专心程度.练习模仿是件苦差事,常常练得口干舌燥,此时一定要坚持,喝口水继续练.练模仿和烧水是一个道理、今天烧把火,水刚热,就把火撤了,明天又是如此,水永远也烧不开.模仿的具体方法,第一步,模仿卑词的语音.模仿时要一板一眼,口形要正确,口腔肌肉要充分调动起来,刚开始模仿时,速度不要过快,用慢速模仿,以便把音发到位,待把音发难了以后,再加快速度,用正常语速反复多说几遍,直到达到不用想就能用正常语速把句子轻松他说出来(脱口而出),对于自己读不准或较生疏的单词要反复多听几遍,然后再反复模仿,一个单词一个单词地练,在那些常用词上下功夫,尽量模仿得像一些.第二步,模仿词组的读法.有了第一步的基础,这一步就容易多了.重点要放在熟练程度和流利程度上,要多练一下连读.失去爆破、不完全爆破,同化等语音技巧.第四步,段落及篇章模仿,重点在于提高流利程度.打开录音机或收音机跟着模仿,“他”说你模仿,同步进行.目的要提高口腔肌肉的反应速度,使肌肉和大脑更加协调起来.模仿练习时要注意一个问题,就是害羞心理.害羞心理一方面源于性格,一般性格内向的人,讲话时易小声小气,这对学习英语语音语调很不利,要注意克服.另一方面是源于自卑心理,总以为自己英语水平太差,不敢开口,尤其是当与口语水平比自己高的人对话时,更易出现这种情况.克服这种心理障碍,是学好口语的前提.(二)复述学英语离不开记忆,记忆不是死记硬背,要有灵活性.复述就是一种很好的自我训练口语,记忆单词.句子的形式.复述有两种常见的方法.一是阅读后复述,一是听磁带后复述.我认为后种方法更好些,这种方法既练听力,又练口语表达能力.同时,可以提高注意力的集中程度,提高听的效果,而且还可以提高记忆力,克服听完就忘的毛病.具体方法:要循序渐进,可由一两句开始,听完后用自己的话(英语)把所听到的内容说出来,一遍复述不下来,可多听几遍,越练重听的遗数就越少.在刚开始练习时,因语言表达能力、技巧等方面原因,往往复述接近于背诵,但在基础逐渐打起来后,就会慢慢放开,由“死”到“活”.在保证语言正确的前提下,复述可有越来越大的灵活性,如改变句子结构,删去一些不大有用或过难的东西,长段可以缩短,甚至仅复述大意或作内容叙要.复述的内容要有所选择.一般来说,所选资料的内容要具体生动,有明确的情节,生词量不要太大.可选那些知识性强的小短文.开始时可以练习复述小故事,有了基础后,复述的题材可扩展开些.复述表面看慢,实际上对英语综合能力的培养很有帮助.查看本栏目更多内容>>
为您推荐:
其他类似问题
扫描下载二维码谈谈AngularJS的优缺点以及如何取舍 | 缺氧空间
谈谈AngularJS的优缺点以及如何取舍
AngularJS可以说是一个非常完美的JS框架。先通过这篇文章来看看AngularJS的几大特性
文章总结了有这些特性
特性一:双向数据绑定
特性二:模板
特性三:MVC
特性四:依赖注入(Dependency Injection,DI)
特性五:Directives(指令)
再来看看我之前写的一篇文章:
想必如果你是一个最求时髦的前端攻城狮一定已经蠢蠢欲动,想在手上的项目里开始小试牛刀了吧。
但是,在上项目前,你务必要了知道AngularJS的脾性,其实在如今的网站实例中,还是有很多类型的不适用它的。那么先说说它比较合适使用的场景:
首先是网站的后台
网站的后台通常都是功能复杂、模块化比较清晰的页面,而且不需要考虑SEO相关的场景,另外就是对浏览器的要求不如前端那么苛刻,你的很多想法可以在后台里体现出来。不过就我了解的情况来看,后台大多是讲究实用的地方,不需要华丽的界面,不需要超前的技术,只要你能赶紧实现一些需求,并且大部分是和服务器、数据库打交道,所以这时候就没前端攻城狮什么事情了,除非你是即做后端又热爱后端的人,比如像我这样的,丑陋的后台是我受不了的。
所以这样来看,AngularJS在后台里只能算是一个配角角色,而且能不能用不是看前端而是看做后台的同学的前端水平了。
网站用户管理页面
这些地方的页面不需要SEO但是直接面对用户,所以还是相当重要的,如果能在这样的页面用AngularJS做好那一定是件非常令人激动的事情。不过现在很多网站的用户管理页面其实还是很薄弱,可能就寥寥几页,这样AngularJS就显得有点没有太大用处的赶脚,不过,如果像淘宝这样的用户中心或者是支付宝里的页面都用上AngularJS来处理页面,那肯定是很赞的。
web应用页面
Web应用页面是非常适合AngularJS使用的,同样不需要SEO,同样可以多方模块化加载,而且经常需要页面上的调整,这样就能够发挥AngularJS的优势了。
这样的页面在最近些年开始流行了,所有的内容在单页里,然后分不同的情景呈现给用户,一次做好就不用多改了,这样的页面可以用AngularJS来做,不过貌似也体现不出什么太大的优势来。
那么有哪些场景不适合AngularJS的使用呢?
我个人觉得目前来说期望做较好SEO的页面还是不适合用AngularJS来做,如果你用它做好页面,一定要针对SEO来做一个供蜘蛛使用的页面,否则你页面就基本进不了搜索引擎的门了
当然了,解决方案其实还是有一些的,不过现在来说一来复杂,二来不成熟,也许过些年针对AngularJS的SEO的方案会越来越简单、成熟。
那么除了对SEO有要求的页面外,还有哪些页面不适合用AngularJS呢?答曰:类WEB1.0页面,这种像新浪、搜狐这样一个页面堆叠了N多内容的老古板的页面还是用用老技术来作吧,新玩意不适合他们,呵呵。
我甚至盯着我们公司的 / 的首页想了老半天,如果这个首页用AngularJS做会出现怎样的情况?
这个首页是由很多模块(部件)组成的一个页面,如果按照AngularJS的完全分离的做法,这个首页在打开时或许会有N多个模板、资源页面需要通过ajax来载入,届时可能不得不担心的就是异步请求太多了,一来会拖慢浏览器端的显示速度,而来会大幅增加服务器的负担。
总的来说,对于前端,不得不考虑模块化带来的各种负面问题,那就是页面需要成倍的增加连接数量。而我曾经在负责VeryCD时甚至会把几个css合并成一个文件来载入以加快页面载入速度,所以说,在前端是接受不了N多个CSS连接、js、模板分别请求的。谢谢。怎么能比较量化的评估一个人的angularjs(1.x)水平呢?
html: {{currentDate()}} js: $scope.currentDate = function(){return new Date();} 这种写法有没有问题?看到某个大师说了这个,求解
这个问题邀请我回答就对了。我提供一些面试时候问过的问题:&br&&br&1. angular的数据绑定采用什么机制?详述原理&br&2. 两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道,详述原理&br&3. 一个angular应用应当如何良好地分层?&br&4. angular应用常用哪些路由库,各自的区别是什么?&br&5. 如果通过angular的directive规划一套全组件化体系,可能遇到哪些挑战?&br&6. 分属不同团队进行开发的angular应用,如果要做整合,可能会遇到哪些问题,如何解决?&br&7. angular的缺点有哪些?&br&8. 如何看待angular 1.2中引入的controller as 语法?&br&9. 详述angular的“依赖注入”&br&10.
如何看待angular 2……&br&&br&上面是需要长篇大论的问题,再来一些小问题:&br&&br&1. ng-if跟ng-show/hide的区别有哪些?&br&2. ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?&br&3. ng-click中写的表达式,能使用JS原生对象上的方法,比如Math.max之类的吗?为什么?&br&4. {{now | 'yyyy-MM-dd'}}这种表达式里面,竖线和后面的参数通过什么方式可以自定义?&br&5. factory和service,provider是什么关系?&br&&br&能全部答出来的人,应该大家都能认识了……
这个问题邀请我回答就对了。我提供一些面试时候问过的问题: 1. angular的数据绑定采用什么机制?详述原理 2. 两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道,详述原理 3. 一个angular应用应当如何良好地分层? 4. angular应用常用哪些路…
强答一下。&br&&br&从小问题开始:&br&&br&&b&1. ng-if跟ng-show/hide的区别有哪些?&/b&&br&&br&&p&第一点区别是,ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不显示。&/p&&br&&p&第二点区别是,ng-if 会(隐式地)产生新作用域,ng-switch 、 ng-include 等会动态创建一块界面的也是如此。&/p&&br&&p&&b&2. ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?&/b&&br&&/p&&br&&p&会提示 Duplicates in a repeater are not allowed. 加 track by $index 可解决。当然,也可以 trace by 任何一个普通的值,只要能唯一性标识数组中的每一项即可(建立 dom 和数据之间的关联)。&br&&/p&&br&&p&&b&3. ng-click中写的表达式,能使用JS原生对象上的方法,比如Math.max之类的吗?为什么?&/b&&br&&/p&&br&&p&不可以。只要是在页面中,就不能直接调用原生的 JS 方法,因为这些并不存在于与页面对应的 Controller 的 $scope 中。除非在 $scope 中添加了这个函数:&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&$scope&/span&&span class=&p&&.&/span&&span class=&nb&&parseInt&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&x&/span&&span class=&p&&){&/span&
&span class=&k&&return&/span& &span class=&nb&&parseInt&/span&&span class=&p&&(&/span&&span class=&nx&&x&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&p&&b&4. {{now | 'yyyy-MM-dd'}}这种表达式里面,竖线和后面的参数通过什么方式可以自定义?&/b&&br&&/p&&br&定义方式:&br&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&app&/span&&span class=&p&&.&/span&&span class=&nx&&filter&/span&&span class=&p&&(&/span&&span class=&s1&&'过滤器名称'&/span&&span class=&p&&,&/span&&span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&k&&return&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&需要过滤的对象&/span&&span class=&p&&,&/span& &span class=&nx&&过滤器参数1&/span&&span class=&p&&,&/span& &span class=&nx&&过滤器参数2&/span&&span class=&p&&,&/span& &span class=&p&&...){&/span&
&span class=&c1&&//...做一些事情
&span class=&k&&return&/span& &span class=&nx&&处理后的对象&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&});&/span&
&/code&&/pre&&/div&&br&使用方式有两种,一种是直接在页面里:&br&&br&&div class=&highlight&&&pre&&code class=&language-html&&&span class=&nt&&&p&&/span&{{now | date : 'yyyy-MM-dd'}}&span class=&nt&&&/p&&/span&
&/code&&/pre&&/div&&br&一种是在 js 里面用:&br&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&c1&&// $filter('过滤器名称')(需要过滤的对象, 参数1, 参数2,...)&/span&
&span class=&nx&&$filter&/span&&span class=&p&&(&/span&&span class=&s1&&'date'&/span&&span class=&p&&)(&/span&&span class=&nx&&now&/span&&span class=&p&&,&/span& &span class=&s1&&'yyyy-MM-dd hh:mm:ss'&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&br&&b&5. factory和service,provider是什么关系?&/b&&br&&br&factory 把 service 的方法和数据放在一个对象里,并返回这个对象;service 通过构造函数方式创建 service,返回一个实例化对象;provider 创建一个可通过 config 配置的 service。&br&&br&从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider,将其定义的内容放在 $get 中返回。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(return 的都可以被访问,所以那些私有变量怎么写你懂的);service 是构造器,可以不返回(绑定到 this 的都可以被访问);provider 是加强版 factory,返回一个可配置的 factory。&br&&br&大问题:&br&&br&&b&1. angular的数据绑定采用什么机制?详述原理&/b&&br&&br&脏检查机制。&br&&br&Angular 在 scope 模型上设置了一个监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时,$digest 循环就会触发,遍历所有的 $watch,最后更新 dom。&br&&br&举个栗子:&br&&br&&div class=&highlight&&&pre&&code class=&language-html&&&span class=&nt&&&button&/span& &span class=&na&&ng-click=&/span&&span class=&s&&&val=val+1&&/span&&span class=&nt&&&&/span&increase 1&span class=&nt&&&/button&&/span&
&/code&&/pre&&/div&&br&&p&click 时会产生一次更新的操作(至少触发两次 $digest 循环)&/p&&ul&&li&按下按钮&/li&&li&浏览器接收到一个事件,进入到 angular context&/li&&li&$digest 循环开始执行,查询每个 $watch 是否变化&/li&&li&由于监视 $scope.val 的 $watch 报告了变化,因此强制再执行一次 $digest 循环&/li&&li&新的 $digest 循环未检测到变化&/li&&li&浏览器拿回控制器,更新 $scope.val 新值对应的 dom&/li&&/ul&&br&&p&$digest 循环的上限是 10 次(超过 10次后抛出一个异常,防止无限循环)。&/p&&br&&p&&b&2. 两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道,详述原理&/b&&br&&/p&&br&&p&这个问题换一种说法就是,如何在平级界面模块间进行通信。有两种方法,一种是共用服务,一种是基于事件。&br&&/p&&br&&p&a. 共用服务&/p&&br&&p&在 Angular 中,通过 factory 可以生成一个单例对象,在需要通信的模块 a 和 b 中注入这个对象即可。&br&&/p&&br&&p&b. 基于事件&/p&&br&&p&这个又分两种方式&/p&&br&&p&第一种是借助父 controller。在子 controller 中向父 controller 触发($emit)一个事件,然后在父 controller 中监听($on)事件,再广播($broadcast)给子 controller ,这样通过事件携带的参数,实现了数据经过父 controller,在同级 controller 之间传播。&/p&&br&&p&第二种是借助 $rootScope。每个 Angular 应用默认有一个根作用域 $rootScope, 根作用域位于最顶层,从它往下挂着各级作用域。所以,如果子控制器直接使用 $rootScope 广播和接收事件,那么就可实现同级之间的通信。&/p&&br&&p&&b&3. 一个angular应用应当如何良好地分层?&/b&&br&&/p&&br&&p&分两个方面讲&/p&&br&&p&a. 目录结构的划分&/p&&br&&p&对于小型项目,可以按照文件类型组织,比如&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&css
controllers
&/code&&/pre&&/div&&br&&p&但是对于规模较大的项目,最好按业务模块划分,比如&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&css
controllers
controllers
&/code&&/pre&&/div&&br&&p&modules 下最好再有一个 common 目录来存放公共的东西。&br&&/p&&br&&p&b. 逻辑代码的划分&/p&&br&&p&作为一个 MVVM 框架,Angular 应用本身就应该按照 模型,视图模型(控制器),视图来划分。&/p&&br&&p&这里逻辑代码的拆分,主要是指尽量让 controller 这一层很薄。提取共用的逻辑到 service 中 (比如后台数据的请求,数据的共享和缓存,基于事件的模块间通信等),提取共用的界面操作到 directive 中(比如将日期选择、分页等封装成组件等),提取共用的格式化操作到 filter 中等等。&/p&&br&&p&在复杂的应用中,也可以为实体建立对应的构造函数,比如硬盘(Disk)模块,可能有列表、新建、详情这样几个视图,并分别对应的有 controller,那么可以建一个 Disk 构造函数,里面完成数据的增删改查和验证操作,有跟 Disk 相关的 controller,就注入 Disk 构造器并生成一个实例,这个实例就具备了增删改查和验证方法。这样既层次分明,又实现了复用(让 controller 层更薄了)。&/p&&br&&p&&b&4. angular应用常用哪些路由库,各自的区别是什么?&/b&&br&&/p&&br&&p&Angular1.x 中常用 ngRoute 和 ui.router,还有一种为 Angular2 设计的 &a href=&///?target=https%3A//angular.github.io/router/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&new router&i class=&icon-external&&&/i&&/a&(面向组件)。后面那个没在实际项目中用过,就不讲了。&/p&&br&&p&无论是 ngRoute 还是 ui.router,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入。&/p&&br&&p&两者区别是:&/p&&br&&p&ngRoute 模块是 Angular 自带的路由模块,而 ui.router 模块是基于 ngRoute模块开发的第三方模块。&/p&&br&&p&ui.router 是基于 state (状态)的, ngRoute 是基于 url 的,ui.router模块具有更强大的功能,主要体现在视图的嵌套方面。&/p&&br&&p&使用 ui.router 能够定义有明确父子关系的路由,并通过 ui-view 指令将子路由模版插入到父路由模板的 &div ui-view&&/div&
中去,从而实现视图嵌套。而在 ngRoute 中不能这样定义,如果同时在父子视图中 使用了 &div ng-view&&/div& 会陷入死循环。&/p&&br&&p&&b&5. 如果通过angular的directive规划一套全组件化体系,可能遇到哪些挑战?&/b&&br&&/p&&br&&p&没有自己用 directive 做过一全套组件,讲不出。&/p&&br&&p&能想到的一点是,组件如何与外界进行数据的交互,以及如何通过简单的配置就能使用吧。&/p&&br&&p&&b&6. 分属不同团队进行开发的angular应用,如果要做整合,可能会遇到哪些问题,如何解决?&/b&&br&&/p&&br&&p&可能会遇到不同模块之间的冲突。比如一个团队所有的开发在 moduleA 下进行,另一团队开发的代码在 moduleB 下:&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&angular&/span&&span class=&p&&.&/span&&span class=&nx&&module&/span&&span class=&p&&(&/span&&span class=&s1&&'myApp.moduleA'&/span&&span class=&p&&,&/span& &span class=&p&&[])&/span&
&span class=&p&&.&/span&&span class=&nx&&factory&/span&&span class=&p&&(&/span&&span class=&s1&&'serviceA'&/span&&span class=&p&&,&/span& &span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&p&&...&/span&
&span class=&p&&})&/span&
&span class=&nx&&angular&/span&&span class=&p&&.&/span&&span class=&nx&&module&/span&&span class=&p&&(&/span&&span class=&s1&&'myApp.moduleB'&/span&&span class=&p&&,&/span& &span class=&p&&[])&/span&
&span class=&p&&.&/span&&span class=&nx&&factory&/span&&span class=&p&&(&/span&&span class=&s1&&'serviceA'&/span&&span class=&p&&,&/span& &span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&p&&...&/span&
&span class=&p&&})&/span&
&span class=&nx&&angular&/span&&span class=&p&&.&/span&&span class=&nx&&module&/span&&span class=&p&&(&/span&&span class=&s1&&'myApp'&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&s1&&'myApp.moduleA'&/span&&span class=&p&&,&/span& &span class=&s1&&'myApp.moduleB'&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&br&&p&会导致两个 module 下面的 serviceA 发生了覆盖。&/p&&br&&p&貌似在 Angular1.x 中并没有很好的解决办法,所以最好在前期进行统一规划,做好约定,严格按照约定开发,每个开发人员只写特定区块代码。&/p&&br&&p&&b&7. angular的缺点有哪些?&/b&&br&&/p&&br&&p&a. 强约束&/p&&br&&p&导致学习成本较高,对前端不友好。&/p&&br&&p&但遵守 AngularJS 的约定时,生产力会很高,对 Java 程序员友好。&/p&&br&&p&b. 不利于 SEO&/p&&br&&p&因为所有内容都是动态获取并渲染生成的,搜索引擎没法爬取。&/p&&br&&p&一种解决办法是,对于正常用户的访问,服务器响应 AngularJS 应用的内容;对于搜索引擎的访问,则响应专门针对 SEO 的HTML页面。&/p&&br&&p&c. 性能问题&/p&&br&&p&作为 MVVM 框架,因为实现了数据的双向绑定,对于大数组、复杂对象会存在性能问题。&/p&&br&&p&可以用来 &a href=&///?target=https%3A///xufei/blog/issues/23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&优化 Angular 应用的性能&i class=&icon-external&&&/i&&/a& 的办法:&/p&&br&&li&减少监控项(比如对不会变化的数据采用单向绑定)&/li&&li&主动设置索引(指定 track by,简单类型默认用自身当索引,对象默认使用 $$hashKey,比如改为track by item.id)&/li&&li&降低渲染数据量(比如分页,或者每次取一小部分数据,根据需要再取)&/li&&li&数据扁平化(比如对于树状结构,使用扁平化结构,构建一个 map 和树状数据,对树操作时,由于跟扁平数据同一引用,树状数据变更会同步到原始的扁平数据)&/li&&br&&p&d. 移动端&/p&&br&&p&&b&8. 如何看待angular 1.2中引入的controller as 语法?&/b&&br&&/p&&br&&p&在 angular 1.2 以前,在 view 上的任何绑定都是直接绑定在 $scope 上的。使用 controllerAs,不需要再注入 $scope,controller 变成了一个很简单的 javascript 对象(POJO),一个更纯粹的 ViewModel。&br&&/p&&br&&p&从源码实现上来看,controllerAs 语法只是把 controller 这个对象的实例用 as 别名在 $scope 上创建了一个属性。&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&directive&/span&&span class=&p&&.&/span&&span class=&nx&&controllerAs&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&locals&/span&&span class=&p&&.&/span&&span class=&nx&&$scope&/span&&span class=&p&&[&/span&&span class=&nx&&directive&/span&&span class=&p&&.&/span&&span class=&nx&&controllerAs&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&nx&&controllerInstance&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&p&但是这样做,除了上面提到的使 controller 更加 POJO 外,还可以避免遇到 AngularJS 作用域相关的一个坑(就是上文中 ng-if 产生一级作用域的坑,其实也是 javascript 原型链继承中值类型继承的坑。因为使用 controllerAs 的话 view 上所有字段都绑定在一个引用的属性上,比如 vm.xx,所以坑不再存在)。&br&&/p&&br&&p&不过不引入 $scope 会出现的一个问题是,导致 $emit、 $broadcast、 $on、$watch 等 $scope 下的方法无法使用。这些跟事件相关的操作可以封装起来统一处理,或者在单个 controller 中引入 $scope,特殊对待。&/p&&br&&p&&b&9. 详述angular的“依赖注入”&/b&&br&&/p&&br&&p&AngularJS 是通过构造函数的参数名字来推断依赖服务名称的,通过 toString() 来找到这个定义的 function 对应的字符串,然后用正则解析出其中的参数(依赖项),再去依赖映射中取到对应的依赖,实例化之后传入。&/p&&br&&p&因为 AngularJS 的 injector 是假设函数的参数名就是依赖的名字,然后去查找依赖项,那如果像下面这样简单注入依赖,代码压缩后(参数被重命名了),就无法查找到依赖项了。&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&function&/span& &span class=&nx&&myCtrl&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&nx&&$scope&/span&&span class=&p&&,&/span& &span class=&nx&&$http&/span&&span class=&p&&){&/span&
&span class=&p&&...&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&p&所以,通常会使用下面两种方式注入依赖(对依赖添加的顺序有要求)。&br&&/p&&br&&p&数组注释法:&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&myApp&/span&&span class=&p&&.&/span&&span class=&nx&&controller&/span&&span class=&p&&(&/span&&span class=&s1&&'myCtrl'&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&s1&&'$scope'&/span&&span class=&p&&,&/span& &span class=&s1&&'$http'&/span&&span class=&p&&,&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&$scope&/span&&span class=&p&&,&/span& &span class=&nx&&$http&/span&&span class=&p&&){&/span&
&span class=&p&&...&/span&
&span class=&p&&}])&/span&
&/code&&/pre&&/div&&br&&p&显式 $inject :&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&myApp&/span&&span class=&p&&.&/span&&span class=&nx&&controller&/span&&span class=&p&&(&/span&&span class=&s1&&'myCtrl'&/span&&span class=&p&&,&/span& &span class=&nx&&myCtrl&/span&&span class=&p&&);&/span&
&span class=&kd&&function&/span& &span class=&nx&&myCtrl&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&nx&&$scope&/span&&span class=&p&&,&/span& &span class=&nx&&$http&/span&&span class=&p&&){&/span&
&span class=&p&&...&/span&
&span class=&p&&}&/span&
&span class=&nx&&myCtrl&/span&&span class=&p&&.&/span&&span class=&nx&&$inject&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s1&&'$scope'&/span&&span class=&p&&,&/span& &span class=&s1&&'$http'&/span&&span class=&p&&];&/span&
&/code&&/pre&&/div&&br&&p&对于一个 DI 容器,必须具备三个要素:依赖项的注册,依赖关系的声明和对象的获取。在 AngularJS 中,module 和 $provide 都可以提供依赖项的注册;内置的 injector 可以获取对象(自动完成依赖注入);依赖关系的声明,就是上面的那两种方式。&/p&&br&&p&&b&10. 如何看待angular 2……&/b&&br&&/p&&br&&p&了解有限。&/p&&br&&p&详细版本可以看这里:&a href=&///?target=https%3A///huangtengfei/blog/issues/14& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&关于 AngularJS 的一些问题 &i class=&icon-external&&&/i&&/a&,里面有 示例代码 和 参考资料。&/p&&br&&p&经验不足,很多问题回答起来都很虚。。。上面回答的这些有的是自己经历过的一些坑的总结,有的是资料的整理(其实不少问题飞哥 &a data-hash=&cc0145aee04dd53cc6590edd& href=&///people/cc0145aee04dd53cc6590edd& class=&member_mention& data-editable=&true& data-title=&@徐飞& data-tip=&p$t$cc0145aee04dd53cc6590edd& data-hovercard=&p$b$cc0145aee04dd53cc6590edd&&@徐飞&/a& 的 &a href=&///?target=https%3A///xufei/blog/issues& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&博客 &i class=&icon-external&&&/i&&/a& 和 &a href=&/people/sharpmaster/topic//answers& class=&internal&& AngularJS 相关问题下的回答&/a& 都已经详细讲过,可自行查阅),仅供参考,欢迎指正~&/p&
强答一下。 从小问题开始: 1. ng-if跟ng-show/hide的区别有哪些? 第一点区别是,ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不显示。 第二点区别是,ng-if 会(隐式…
已有帐号?
无法登录?
社交帐号登录
满地都是六便士,他却抬头看见了月亮。

我要回帖

更多关于 衡量一个人的标准 的文章

 

随机推荐