Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
angular֪ʶÌåϵ
 
  2238  次浏览      30
 2019-8-2 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ô¼òÊ飬ʲôÊÇ Angular£¬ÎÒÃÇΪʲôҪѧϰËü°¡£¿ÄÇô½ñÌì¾ÍÈÃÎÒÃÇÈÏʶһÏÂʲôÊÇAngular£¬AngularÊÇÒ»ÖÖÓÃÓÚ´´½¨µ¥Ò»Ó¦ÓóÌÐò½çÃæµÄǰ¶Ë¿ò¼Ü,ËüÓÐÐí¶àºËÐŦÄÜÀýÈçÊý¾Ý°ó¶¨,·þÎñ,Ö¸ÁîÒÔ¼°ÒÀÀµ×¢ÈëµÈµÈ

Ò».angular »ù±¾¸ÅÄî

1.Àà¿â( ÌṩÀà·½·¨ ) ºÍ¿ò¼Ü

Àà¿âÌṩһϵÁеĺ¯ÊýºÍ·½·¨µÄºÏ¼¯£¬Äܹ»¼Ó¿ìÄãд´úÂëµÄËÙ¶È¡£µ«ÊÇÖ÷µ¼Âß¼­µÄ»¹ÊÇ×Ô¼ºµÄ´úÂë¡£³£ÓõÄÀà¿â eg: jquery

¿ò¼Ü ÌØÊâµÄÒѾ­ÊµÏÖÁË web µÄÓ¦Óá£Ö»ÐèÒª°´ÕÕÆäÂß¼­Ìî³äÄãµÄÒµÎñÂß¼­¾ÍÄܵõ½ÍêÕûµÄÓ¦ÓÃ

2.angular µÄÌØµã

Ìṩ¶Ë¶Ô¶ËµÄ½â¾ö·½°¸

¹¹½¨Ò»¸ö CRUD(add retrieve update delete) Ó¦ÓõÄÈ«²¿ÄÚÈÝ£º`Êý¾Ý°ó¶¨£¬±íµ¥ÑéÖ¤£¬Â·ÓÉ£¬Éî¶ÈÁ´½Ó£¬×é¼þÖØÓã¬ÒÀÀµ×¢Èë`

²âÊÔ·½°¸£º `µ¥Ôª²âÊÔ£¬ ¶Ë¶Ô¶Ë²âÊÔ£¬Ä£ÄâºÍ×Ô¶¯»¯²âÊÔ`

¾ßÓи÷ÖÖÖÖ×ÓÓ¦ÓÃ×÷Ϊģ°åºÍÆðµã

ÌØµã

angular Ö÷Òª¿¼Âǹ¹½¨ CRUD Ó¦Ó㬲¢²»ÊÇËùÓеÄÓ¦Óö¼ÊʺÏʹÓà angular À´¹¹½¨

ÀýÈçÓÎÏ·£¬Í¼Ðα༭½çÃæ¾Í²»ÊʺÏʹÓà angular

angular µÄ±ê°ñ¸ÅÄî

angular ÈÏΪÉùÃ÷ʽµÄ´úÂë±ÈÃüÁîʽµÄ´úÂë¸ü¼Ó·ûºÏ ¹¹½¨ (ÊÓͼ + Èí¼þ)Âß¼­µÄ´úÂë

ÉùÃ÷ʽµÄÓïÑÔ £ºÌáǰ½«ËùÓеIJÙ×÷ÄÚÖã¬Ê¹ÓÃʱֻÐèÒª°´Õչ涨ÉùÃ÷¸Ã²Ù×÷£¬ÓïÑÔ»òÕß»úÆ÷±¾Éí¿ÉÒÔ½øÐй¹½¨Ó¦ÓÃ

ÉùÃ÷ʽµÄÓïÑÔ½éÉÜ£ºHTML ¾ÍÊÇÉùÃ÷ʽµÄ½á¹¹£¬±ÈÈçÐèҪij¸öÔªËØ¾ÓÖУ¬²»ÐèÒª¸æËßä¯ÀÀÆ÷¾ßÌåµÄÐÐΪ£¨ÐèÒªÕÒµ½ÔªËصÄÖмäλÖ㬽«ÔªËØ·ÅÔÚÄÇÀ£¬Ö»ÐèÒªÌí¼ÓÒ»¸ö align='center' µÄÊôÐÔ¸øÐÂÔªËØµÄ¿ÉÒÔÁË¡£Õâ¾ÍÊÇÉùÃ÷ʽµÄÓïÑÔ

ÉùÃ÷ʽµÄÓïÑÔÒ²Óв»ºÃµÄµØ·½£¬¾ÍÊÇËùÓпÉÒÔʹÓõIJÙ×÷ÒѾ­ÌáǰÄÚÖã¬ËùÒÔËû²»ÄÜʶ±ðеÄÓï·¨½á¹¹£¬±ÈÈçÄãÏëÈÃÔªËØ¾Ó×ó 1/3 ´¦¾ÍºÜÄÑ´¦Àí½« DOM ²Ù×÷ºÍÓ¦ÓÃÂß¼­½âñî

½«²âÊԺͿª·¢Í¬µÈ¿´´ý

´ó·ù¶È¼õÉÙÓ¦ÓÃÖÐÐèҪʹÓõĸ÷ÖÖ »Øµ÷µÄÂß¼­£¬°ÚÍÑ´óÁ¿µÄ»Øµ÷Âß¼­

½â·ÅDOM ²Ù×÷£¬

¶ÔÒ³ÃæµÄUI²Ù×÷¿É¿Ø£¬ÀýÈç´óÁ¿µÄDOMʼþ

angular ÒѾ­ÓÐÁËÐí¶à´î½¨ºÃµÄ»ù´¡·þÎñ¿ò¼Ü

4.angular µÄ³õʼ»¯ÐÅÏ¢

angular »áÔÚ DOMContentLoaded ʼþ´¥·¢Ê±Ö´ÐУ¬ ͨ¹ý ng-app Ö¸Áî ѰÕÒÄãµÄÓ¦Óõĸù×÷ÓÃÓò

1. Ê×ÏÈÔØÈëºÍÖ¸ÁîÏà¹ØµÄÄ£¿é

2. ´©¼þÓ¦ÓÃµÄ ×¢ÈëÆ÷(injector)

3. ½« ng-app ×÷Ϊ¸ù½Úµã±àÒë DOM ¡£

Ò²¿ÉÒÔʹÓà angular.bootstrap( ½Úµã ) À´ÊÖ¶¯×°Ôؽڵã

¶þ. angular µÄÖ¸Áî

Ö¸ÁîµÄ¶¨Ò壺ÓÉÒ»¸öеÄÊôÐÔ£¬ÔªËØÃû³Æ£¬cssÀàÃûµÈ´øÀ´DOM Ñùʽ»òÕßÐÐΪµÄ¸Ä±ä¡£

Ö¸Á angular µÄÐÐΪÀ©Õ¹ £©£ºHTML ±àÒëÆ÷£¬Äܹ»Ê¶±ðÐ嵀 HTML Óï·¨£¬¿ÉÒÔ½«ÐÐΪ¶¯×÷¹ØÁªµ½HTML»òÕ߯äÊôÐÔÉÏÃæ£¬ÉèÖÿÉÒÔ´´Ôì×Ô¶¨ÒåÐÐΪµÄÔªËØ£¬¿É¸´Óá£

×¢ÒâÖ¸ÁîÊÇÔÚ×ʼµÄʱºò±»ÔØÈëÒ³ÃæµÄ

Ö¸Áî±¾ÖÊÉϾÍÊÇÒ»¸ö´úÓù¦Äܵĺ¯Êý ** return Ò»¸öº¯Êý **£¬Àà±ÈÓÚ react µÄ×Ô¶¨Òå×é¼þ

** angular API Óм¸¸ö´óµÄµÄ·ÖÀà **

ng.function ( ¹¦Äܺ¯Êý£¬Àà±ÈÓÚjquery µÄ·½·¨º¯Êý )

** ng.directive( angular µÄÖØ´óÄ£¿é£¬eg: ng-model µÈ ) **

** ng.provider £¨ ÒÀÀµ×¢È빦ÄÜ £©**

.......

Èý. angular µÄ ±àÒëÆ÷£¨ compiler £©

±àÒëÆ÷ͨ¹ý±éÀú DOM À´²éÕҺ͹ØÁªÊôÐÔ£¬ Æä·ÖΪ ±àÒë ºÍ Á´½Ó Á½¸ö½×¶Î

±àÒ룺±éÀúËùÓÐµÄ DOM ÊÕ¼¯Ö¸ÁÉú³ÉÒ»¸ö Á´½Óº¯Êý¼¯ºÏ

Á´½Ó£º½«Ö¸ÁîºÍ×÷ÓÃÓò°ó¶¨£¬Éú³ÉÒ»¸ö¶¯Ì¬µÄÊÓͼ¡£

×÷ÓÃÓòÄ£Ð͵ĸıä»á·´Ó³µ½ÊÓͼÉÏ£¬ÊÓͼµÄ²Ù×÷»á·´Ó³µ½µ××÷ÓÃÓòÄ£ÐÍ£¨ Öмäͨ¹ýÁ´½Óº¯ÊýµÃÒÔʵÏÖ £©

ËÄ. angular µÄÊÓͼ £¨ ¶¯Ì¬µÄ £©

Îå. angular ºËÐÄ

Æô¶¯³ÌÐò + Ö´ÐÐÆÚ + ×÷ÓÃÓò + ¿ØÖÆÆ÷ ( Ó¦ÓõÄÐÐΪ ) + Ä£ÐÍ ( Ó¦ÓõÄÊý¾Ý ) + ÊÓͼ + Ö¸Áî + ¹ýÂËÆ÷ + ×¢ÈëÆ÷ + Ä£¿é + ÃüÃû¿Õ¼ä

angular Ö´ÐÐÁ÷³Ì.png

1. Æô¶¯³ÌÐò

** Æô¶¯½×¶ÎÖ÷Òª¹¤×÷Êǽ¨Á¢Ö¸Áî¹ØÁª¹ØÏµºÍäÖȾDOM **

ä¯ÀÀÆ÷½âÎöHTML£¬È»ºó½«Æä½âÎö³ÉΪ DOM

ä¯ÀÀÆ÷ÔØÈë angularJS

angular µÈ´ý DOMContentLoaded event ʼþ´¥·¢

angular ÕÒµ½ ng-app Ö¸Á×÷ΪӦÓóÌÐòµÄ±ß½ç»òÕ߸ù×÷ÓÃÓò

ʹÓà ng-app ÖеÄÄ£¿éÀ´Öð¸öÅäÖÃ×¢ÈëÆ÷( $injector )

×¢ÈëÆ÷ ( $injector ) ÊÇÓÃÓÚ´´½¨ ¡°±àÒë·þÎñ($compile service)¡± ºÍ ¡°¸ù×÷ÓÃÓò( $rootScope )¡±¡£

±àÒë·þÎñµÄ×÷Ó㺠Ê×ÏȽ« DOM ºÍ ¸ù×÷ÓÃÓò½øÐÐÁ´½Ó

±àÒë·þÎñ½«Ö¸Áî( ng-model ... ng-init...µÈ ) ºÍ ×÷ÓÃÓòµÄ±äÁ¿½øÐÐÒ»Ò»¹ØÁª¡£

ͨ¹ý±äÁ¿Ìæ»»£¬½«¹¹¼þºÃµÄÊÓͼչÏÖÔÚÒ³ÃæÉÏ×¢ÒâÉÏÃæ ±àÒë·þÎñµÄ×÷ÓãºÁ½¸ö½×¶Î£º±àÒë½×¶Î ºÍ Á´½Ó½×¶Î

** ×¢Òâµã: **

ng-app ×÷Ϊ¸ùÓ¦ÓÃÖ¸ÁÊ×ÏȽ«×¢ÈëÆ÷ÅäÖÃÔÚ¸ùÄ£¿éÉÏÃæ¡£( ÕâÒ»²½Óë DOM ÎÞ¹Ø )

$injector ´´½¨ÁË $compile ºÍ $rootScope

$compile ½«µÃµ½µÄËùÓеĸù DOM ºÍ $rootScope ½øÐйØÁª

2. Ö´ÐÐʱÆÚ ( Ö÷ÒªÊÇʼþ»Øµ÷£¬ÏìÓ¦²Ù×÷µÈ´¥·¢Ö´ÐÐ )

concepts-runtime.png

** Ö´ÐÐʱÆÚÖ÷Òª¹¤×÷ÄÚÈÝÊÇ Ê¼þÒª±»ÕýÈ·µÄÖ´ÐкÍäÖȾ **¹ØÓÚÖ´ÐÐʱÆÚµÄÖØµã¸ÅÄî

Ö»ÓÐÔÚangular µÄÖ´ÐеÄÉÏÏÂÎÄ»·¾³ÖвÅÄÜÏíÊܵ½angular ÌṩµÄ¸÷ÖÖÊý¾Ý°ó¶¨£¬Òì³£´¦Àí£¬×ÊÔ´¹ÜÀíºÍ·þÎñµÈµÈ¡£eg: ʹÓà angular µÄ $setTimeOut Íê³ÉÑÓʱºó¿ÉÒÔ×Ô¶¯¸üÐÂÒ³ÃæÊÓͼ

¿ÉÒÔʹÓà $apply() À´´ÓÆÕͨµÄJavaScript ½øÈë angularJsµÄÉÏÏÂÎÄ»·¾³¡£Ö»ÓÐÔÚʹÓÃ×Ô¶¨ÒåµÄʼþ»òÕßʹÓõÚÈý·½Àà¿âʱ£¬²ÅÐèÒªÖ´ÐÐ $apply¡£

Ö´ÐÐʱÆÚµÄÁ÷³Ì£º

ͨ¹ýµ÷Óà scope.$apply( fn ) ½øÈëangular µÄÉÏÏÂÎÄ»·¾³¡£fn ΪÐèÒªÔÚÉÏÏÂÎÄÖÐÖ´Ðеĺ¯Êý

angular Ö´ÐÐ fn, ´Ëº¯Êý¸Ä±äÓ¦ÓõÄ״̬

angular ½øÈë $digest Ñ­»·£¬$digest ÓÉÁ½¸öСѭ»·×é³É($evalAsync ¶ÓÁкÍ$watchÁÐ±í£¬ÈçÉÏͼ ), ¸ÃÑ­»·Ò»Ö±µü´ú£¬Ö±µ½Ä£ÐÍÎȶ¨.

Ò»¸ö´óÑ­»·ÓÉÁ½¸öСѭ»·¹¹³É¡£

Ä£ÐÍÎȶ¨µÄ±êÖ¾ÊÇ£º$evalAsync ¶ÓÁÐΪ¿Õ£¬$watch ÁбíÖÐÔÙÎÞÈκθı䡣$evalAsync ͨ³£ÓÃÓÚ¹ÜÀíÊÓͼäÖȾǰÐèÒªÔÚµ±Ç°¿ò¼ÜÍâÃæÖ´ÐеIJÙ×÷

$watchÊǸö±í´ïʽµÄ¼¯ºÏ£¬Èô¼ì²âµ½Óиü¸Ä£¬$watch º¯Êý¾Í»áµ÷Ó㬽«ÐµÄÖµ¸üе½ DOM ÖÐ

Ò»µ© angular µÄ $digest ½áÊøÑ­»·£¬Õû¸öÖ´ÐоͻáÀ뿪 angular ºÍ JavaScript µÄÉÏÏÂÎÄ»·¾³£¬

×îºóÒ»²½£¬ä¯ÀÀÆ÷¸üнçÃæÊÓÍ¼ÖØÐÂäÖȾ¡£

3. ×÷ÓÃÓò

mvc.png

½«Ä£ÐÍÕûÀíºÃ´«µÝ¸øÊÓͼ£¬½«ä¯ÀÀÆ÷µÄ¶¯×÷ºÍʼþ´«µÝ¸ø¿ØÖÆÆ÷

1. ×÷ΪÖÐ½é´æÔÚ ( Á´½ÓÊý¾ÝÄ£ÐͺÍÊý¾ÝÊÓͼ )

2. ×÷ÓÃÓòÓµÓв㼶½á¹¹£¬´Ë²ã¼¶½á¹¹ºÍ DOM µÄ²ã¼¶½á¹¹Ï໥¶ÔÓ¦

3. ÿһ¸ö×÷ÓÃÓò¶¼ÓжÀÁ¢µÄÉÏÏÂÎÄ»·¾³

×÷ÓÃÓòµÄÌØµã:

1. ×÷ÓÃÓòÌṩ API ( $watch À´¹Û²ìÄ£Ð͵ı仯 )
2. ×÷ÓÃÓòÌṩ API ( $apply ) ½«ÈκÎÄ£Ð͵ĸıä´Ó angular ÁìÓò ͨ¹ýϵͳӳÉäµ½ÊÓͼÉÏ
3. ×÷ÓÃÓòͨ¹ý¹²ÏíÄ£ÐͳÉÔ±µÄ·½·¨Ç¶Ì×µ½Ó¦ÓÃ×é¼þÉÏÃæ£¬Ò»¸ö×÷ÓÃÓò´Ó¸¸×÷ÓÃÓò¼Ì³ÐÊôÐÔ

4. ×÷ÓÃÓòÌṩ±í´ïʽִÐеÄÉÏÏÂÎÄ»·¾³

 

×÷ÓÃÓòµÄʼþ´«µÝ£º

×÷ÓÃÓòµÄʼþ´«µÝºÍ DOM µÄʼþ´«µÝÀàËÆ£¬Ê¼þ¿ÉÒԹ㲥¸ø×Ó×÷ÓÃÓò£¬Ò²¿ÉÒÔ´«µÝ¸ø¸¸×÷ÓÃÓò¡£

 

×÷ÓÃÓòµÄÉùÃ÷ÖÜÆÚ

1. ´´½¨: ¸ù×÷ÓÃÓòÔÚÓ¦Óñ» $injector Æô¶¯µÄʱºò±»´´½¨£¬ÔÚÄ£°åÁ´½Ó½×¶Î£¬ÓÐЩִÐлá×Ô¶¯´´½¨ÐµÄ×÷ÓÃÓò ( eg£ºng-repeat )

2. ¹Û²ìÕß×¢²á£ºÄ£°åÁ´½Ó½×¶Î£¬Ö¸Áî»áÔÚ×÷ÓÃÓòÉÏ×¢²á¹Û²ìÕߣ¬¹Û²ìÕßÓÃÓÚ½« DOM µÄ¸Ä±ä´«µÝ¸ø DOM

3. Ä£Ð͸İ棺 Ö»ÓÐÔÚ scope.$apply() Öб仯µÄÊý¾Ý²ÅÄܱ»×¼È··´Ó³µ½Ä£ÐÍÉÏ
angular ±¾ÉíµÄ API »á×Ô¶¯Ó¦Óà apply£¬eg: $http $timeout ²»ÐèÒª¶îÍâµÄ $apply

4. ±ä»¯µÄ¹Û²â£ºÔÚ $apply µÄ×îºó£¬angular »áÔÚ¸ù×÷ÓÃÓòÖ´ÐÐÒ»¸ö $digest Ñ­»·£¬½«ËùÓеı仯´«µÝ¸ø×Ó×÷ÓÃÓò£¬Ö»ÒªÔÚ $digest Ñ­»·ÖеÄËùÓбí´ïʽºÍº¯Êý¶¼»á±»¼ì²â£¬ÓÃÓÚ¹Û²ìÄ£Ð͵ı仯¡£

 

4. ¿ØÖÆÆ÷

¿ØÖÆÆ÷ÓÃÓÚ¹¹ÔìÊÓͼµÄ¿ØÖÆ´úÂ룬Ö÷Òª×÷ÓþÍÊǹ¹ÔìÊý¾ÝÄ£ÐÍ¡£

¿ØÖÆÆ÷µÄÌØµã ( ¿ØÖÆÆ÷Ó¦¸ÃºÍÊÓͼ×öµ½·ÖÀë )

1. ¿ØÖÆÆ÷ÊÇÓÉ JavaScript Êéд£¬¿ØÖÆÆ÷²»Ó¦¸Ã°üº¬ÈκΠHTML ´úÂë¡£
2. ÊÓͼʹÓà HTML ÊéдµÄ£¬ÊÓͼ²»Ó¦¸Ã°üº¬ÈκΠJavaScript ´úÂë¡£
3. ¿ØÖÆÆ÷ºÍÊÓͼûÓÐÖ±½ÓµÄ¹ØÏµ¡£ËùÒÔ¿ÉÒÔʹÓÃÒ»¸ö¿ØÖÆÆ÷¶ÔÓ¦¶à¸öÊÓͼ¡£

 

¿ØÖÆÆ÷µÄÈý¸ö×÷ÓÃ( Êéд£¬·ÖÇå c ºÍ v µÄÇø±ð )

1. ÔÚÓ¦ÓÃÖÐÉèÖÃÄ£Ð͵ijõʼ״̬£¬
2. ½«ÕûÀíºÃµÄÄ£Ðͺͺ¯Êý½»¸ø×÷ÓÃÓò( scope )
3. ¼àÌýÄ£Ð͵ı仯²¢ÏìӦʼþ»òÕß¶¯×÷( ʼþÏìÓ¦º¯Êý )

5. Ä£ÐÍ

Ä£Ð;ÍÊǺÍÄ£°å½áºÏÉú³ÉÊÓͼ

Ä£°å¾ÍÊǵ¥´¿µÄ HTML ´úÂ룬

Ä£Ð͵ÄÌØµã£º

Ä£ÐͱØÐëʹÓÃ×÷ÓÃÓòÀ´ÒýÓÃ

Ä£ÐÍ¿ÉÒÔÊÇÈκΠJavaScript ÀàÐ͵ÄÊý¾Ý

 

mvc.png

˵Ã÷£º

¿ØÖÆÆ÷ºÍ ÊÓͼûÓÐÖ±½ÓµÄ¹ØÏµ

mvc µÄºËÐÄÊÇÓÉ×÷ÓÃÓò³Ðµ£ÆðÀ´µÄ

Ò»¸ö¿ØÖÆÆ÷¿ÉÒÔ¶ÔÓ¦¶à¸öÄ£ÐÍ

6. angular µÄ watch, apply, digest

$watch

$watch ¶ÓÁÐÊÇÔÚ UI ÉÏʹÓÃÁËÒ»¸öÖ¸Áîʱ£¬¾Í×Ô¶¯Éú³ÉÒ»Ìõ $watch,ËùÓÐµÄ $watch ×éºÏ³ÉΪһ¸ö $watch ÁÐ±í£¬$watch ÁбíÊÇÔÚ±àÒëµÄʱºò¾ÍÉú³ÉÍê±Ï

<ul>
<li ng-repeat="person in people">
{{person.name}} - {{person.age}}
</li>
</ul>

 

¶ÔÓÚÉÏÊö ng-repeat ÈôÓÐ 10 ¸ö people »áÉú³É 10 * 2 +1 ¸ö $watch

1.*** $watch ²ÎÊýÏê½â ***ʹÓà $watch º¯Êý¿ÉÒÔ½øÐÐ ×Ô¶¨ÒåµÄ ²Ù×÷¼àÌý£¬¸ü¸Ä ÊÓͼ

$scope.$watch('name', function(newValue, oldValue) {
if (newValue === oldValue) { return; } // AKA first run
$scope.updated++;
});

$watch µÄ µÚ¶þ¸ö²ÎÊýÊÇÒ»¸ö º¯Êý£¬ÓÃÓÚ ¼àÌý Ç°ÃæµÄ±äÁ¿ÊÇ·ñ¸ü¸Ä¡£

$scope.$watch('user', function(newValue, oldValue) {
if (newValue === oldValue) { return; }
$scope.updated++;
}, true);

$watch µÄ µÚÈý¸ö²ÎÊýÊÇ boolear ÀàÐ͵ÄÖµ£¬
** ×÷Óãº**
** newValue ºÍ oldValue ĬÈÏÊÇ±È½Ï Ð¾ÉÖµµÄÒýÓã¬Èô user ÊÇÒ»¸ö¶ÔÏó£¬ÔòÎÞ·¨Åж϶ÔÏóÄÚ²¿ÖµµÄ¸Ä±ä,ÐèҪʹÓõÚÈý¸ö²ÎÊýÀ´½øÐÐÅж϶ÔÏóÄÚ²¿Éî²ã´ÎµÄÖµÊÇ·ñ¸Ä±ä¡£**

 

2.$digest

$digest Ñ­»·¹ý³Ì »á °üº¬Á½¸öСѭ»·£¬$evalAsync ºÍ $watch ¶ÓÁÐÑ­»·¡£$digest »áÉæ¼°µ½Ôà¼ì²é»úÖÆ£¬·´¸´Ñ¯ÎÊ $watch ¶ÓÁÐÊÇ·ñÓÐÊý¾Ý¸Ä±ä

 

{{ name }}
<button ng-click="changeFoo()">Change the name</button>

// ÕâÀïÓÐ Ò»¸ö $watch£¨ name »áÉú³É $watch £¬ ¶ø ng-click ²»»áÉú³É $watch, ÒòΪº¯Êý ÊDz»»á±äµÄ¡£

ÎÒÃǰ´Ï°´Å¥

ä¯ÀÀÆ÷½ÓÊÕµ½Ò»¸öʼþ£¬½øÈëangular context£¨ºóÃæ»á½âÊÍΪʲô£©¡£

$digestÑ­»·¿ªÊ¼Ö´ÐУ¬²éѯÿ¸ö$watchÊÇ·ñ±ä»¯¡£

ÓÉÓÚ¼àÊÓ$scope.nameµÄ$watch±¨¸æÁ˱仯£¬Ëü»áÇ¿ÖÆÔÙÖ´ÐÐÒ»´Î$digestÑ­»·¡£

еÄ$digestÑ­»·Ã»Óмì²âµ½±ä»¯¡£

ä¯ÀÀÆ÷ÄûؿØÖÆÈ¨£¬¸üÐÂÓë$scope.nameÐÂÖµÏàÓ¦²¿·ÖµÄDOM

3.$apply ÓÃÓÚ½øÈë angular µÄ ÉÏÏÂÎÄ»·¾³£¬ Ö»ÊÇÒ»¸öangular ÌṩµÄÒ»¸ö api ûÓÐ Ñ­»·µÈ

$apply »á×Ô¶¯´¥·¢ $digest Ñ­»·

angular ×Ô¼ºµÄʼþ¶¯×÷»á×Ô¶¯´¥·¢ $apply

·Ç angular »·¾³ÐèÒªÊÖ¶¯´¥·¢ $apply

ÓÐʱ×Ô¼ºÌí¼ÓÁ˶îÍâµÄ ²Ù×÷»ò¶¯×÷£¬ÐèÒªÊÖ¶¯ $apply() Ö´ÐÐ $digest Ñ­»·( µäÐÍ£º·ÃÎÊ·þÎñÆ÷ÒÔºóµÄ»Øµ÷²Ù×÷ )

element.bind('click', function() {
scope.foo++;
scope.bar++;

scope.$apply(); // ÊÖ¶¯´¥·¢£¬½øÐÐÒ»´Î $digest Ñ­»·
});

// µÚ¶þÖÖ
element.bind('click', function() { //
scope.$apply(function() { ʹÓà $apply º¯Êý½øÐÐ $digest Ñ­»·
scope.foo++;
scope.bar++;
});
})

 

4.angular Ö´ÐÐʱÆÚ ÔÙ½âÊÍ £¨ Ö÷ÒªÊÇ $apply $digest $watch ÕâÈý¸ö·½·¨µÄÁ÷³Ì £©

concepts-runtime.png

1. Ò³Ãæ´¥·¢ DOM ʼþ£¬»Øµ÷µÈ¡£
2. Ó¦ÓóÌÐò×Ô¶¯µ÷Óà $apply() ·½·¨½øÈë angular ÉÏÏÂÎÄ£¬´¥·¢ $digest Ñ­»·¿ªÊ¼£¬
3. $digest Ñ­»· ±éÀú $watch ÁÐ±í¼¯ºÏ£¬Ôà¼ì²é Êý¾ÝÄ£Ð͵ĸı䣬ѭ»·¹ý³Ì
4. ¼ì²éÍê±Ï£¬¸üРÊý¾ÝÄ£ÐÍ£¬( ¸ü¸Ä±äÁ¿»òÕ߯äËû¶¯×÷²Ù×÷ )
5. ×÷ÓÃÓò¸ù¾ÝÊý¾ÝÄ£ÐÍäÖȾ UIÊÓͼ¡£
6. ¼ÌÐø¼àÌý¡£

 

7. angular µÄ ͨѶ

angular Ä£¿éÖ®¼äµÄͨѶ·½Ê½

1. ×÷ÓÃÓò´«µÝ£¨ ¸¸×ÓÄ£¿éͨѶ £©$parent $child
2. ×÷ÓÃÓòÊý¾Ý´«µÝ + $watch £¨ ÀàËÆÓÚÖ¸ÁîµÄÊý¾Ý´«µÝµÄ = £©
3. ʼþ¹ã²¥ ( $emit $on $boardcast )

 

1.ʹÓà $rootscope

½« $rootscope ×÷ΪÒÀÀµ×¢ÈëÏÔÚ×Ó×é¼þÖÐʹÓà $rootscope

ʹÓó¡¾°£º ¶ÔÓÚÒ»´¦¸Ä±ä£¬ÐèÒª¶à´¦Í¨Öª¸ü¸ÄµÄ±äÁ¿£¬Æµ·±µÄµ÷ÓÿÉÒÔʹÓà $rootscope( ¶ÔÓڵǼʹÓõÄÓû§Ãû³Æ£¬ÔÚÒ»¸öµØ·½Ê¹Óã¬ÐèÒª¶à´¦ÏÔʾ£¬²¢ÇÒ¸ü¸ÄºóÐèÒª¶à´¦¸ü¸Ä )

myAppModule.controller('myCtrl', function($scope, $rootScope) {

$scope.change = function() {

$scope.test = new Date();

};

$scope.getOrig = function() {
return $rootScope.test;
};

 

})

2.×÷ÓÃÓò¼Ì³Ð µÄ Ä£¿éͨѶ

×÷ÓÃÓò¼Ì³ÐÊÇÔÚ×ÓÄ£¿éÖпÉÒÔÖ±½ÓʹÓø¸Ä£¿é·½·¨/±äÁ¿µÄ ͨѶ·½Ê½

** Ö»ÊʺÏÊý¾Ý´Ó ¸¸Ä£¿é´«µÝµ½×ÓÄ£¿é **

** ÔÚÖ¸ÁîµÄÊý¾Ý´«µÝÖРͨ³£Ê¹ÓÃÕâÖÖģʽ½øÐÐͨѶ **

<div ng-controller="Parent">
<div ng-controller="Child">
<div ng-controller="ChildOfChild">
<button ng-click="someParentFunctionInScope()">Do</button>
</div>
</div>
</div>

 

ÌØµã£º

Ö»ÊʺÏÊý¾Ý´Ó ¸¸Ä£¿é´«µÝµ½×ÓÄ£¿é

×ÓÄ£¿éµÄͬÃû·½·¨»á¸²¸Ç¸¸Ä£¿éµÄ ·½·¨/±äÁ¿

²»ÄܽøÐÐͬ¼¶×é¼þÖ®¼äµÄÊý¾Ý´«µÝ¡£³ý·ÇÏÔʾ¸ü¸Ä $rootscope

²ã¼¶½Ï¶àʱ ά»¤±È½ÏÂé·³

×÷ÓÃÓòͨѶ + $watch

×÷ÓÃÓòµÄÊý¾ÝÖ»ÄÜ´Ó ¸¸×÷ÓÃÓò´«µÝµ½×Ó×÷ÓÃÓò£¬** ʹÓà $watch() ¿ÉÒÔ¼à¿Ø×Ó×÷ÓÃÓÚÊý¾ÝµÄ¸Ä±ä£¬ÀàËÆÓÚ Ö¸ÁîÊý¾Ý´«µÝµÄ = ( µÈÓںŠ) **

.controller("Parent", function($scope){
$scope.VM = {a: "a", b: "b"};
$scope.$watch("VM.a", function(newVal, oldVal){
// code
});
})

// ÐèÒªÓõ½ $parent µÈ
.controller('Child', function($scope){
$scope.$parent.$watch('$scope.VM.a', function() { ..... })
})

 

4.ÏûÏ¢»úÖÆ

scope ÌṩÁËðÅݺÍËíµÀ»úÖÆ£¬$on, $emit, $boardcast

$boardcast ½«Ê¼þ¹ã²¥¸øËùÓеÄ×Ó×é¼þ£¬
$on ÓÃÓÚ×¢²áʼþº¯Êý£¬
$emit ÓÃÓÚʼþÏòÉÏðÅÝ´«µÝ

ÓÅȱµã: Ïà±ÈÓÚ $emit£¬$boardcast ÐèÒªÏòËùÓеÄ×Ó×é¼þ¹ã²¥×é¼þµÄ¸Ä±ä£¬»áÏûºÄ¸ü¶àµÄ×ÊÔ´

** ËùÒÔ ÔÚÓ¦ÓõÄͨѶÊý¾Ý´ïµ½ºÜ´óÌåÁ¿ **
$rootscope $scope + watch ¶¼¿ÉÒÔ³ÉΪÉè¼ÆµÄ»ù±¾ÊÖ·¨

 

5.ʹÓà Service ½øÐÐͨѶ

ÒòΪ angular ÖÐËùÓÐµÄ Service ¶¼Êǵ¥ÀýµÄ£¬Ê¹Óà Service Äܹ»±È ʱ¼äËíµÀ»úÖÆÔÚÂß¼­Éϸü¼ÓÇåÎú¡£

¼òµ¥³éÈ¡»ù±¾µÄÊý¾Ý

var myApp = angular.module('myApp', []);
myApp.factory('Data', function() {
return { message: "I'm data from a service" }
})

function FirstCtrl($scope, Data) {
$scope.data = Data;
}

function SecondCtrl($scope, Data) {
$scope.data = Data;
}

 

½ø½×°æÒ»£º ʹÓà $watch À´¼à²âÊý¾Ý±ä»¯

angular.module('Store', [])
// Ìṩ»ù±¾Êý¾ÝÄ£ÐͳõʼÊý¾ÝµÄ Service
.factory('Products', function() {
return {
query: function() {
return [{ name: 'Lightsaber', price: 1299.99}, { name: 'Jet Pack', price: 9999.99}, { name: 'Speeder', price: 24999.99}];
}
};
})
// ÌṩÊý¾ÝÄ£Ð굀 Service
.factory('Order', function() {
var add = function(item, qty) {
item.qty = qty;
this.items.push(item);
};

var remove = function(item) {
if (this.items.indexOf(item) > -1) {
this.items.splice(this.items.indexOf(item), 1);
}
};

var total = function() {
return this.items.reduce(function(memo, item) {
return memo + (item.qty * item.price);
}, 0);
};

return { // ·µ»ØÍêÕûµÄÊý¾ÝÄ£ÐÍ
items: [],
addToOrder: add,
removeFromOrder: remove,
totalPrice: total
};
}).controller('OrderCtrl', function(Products, Order) {
this.products = Products.query();
this.items = Order.items;

this.addToOrder = function(item) {
Order.addToOrder(item, 1);
};

this.removeFromOrder = function(item) {
Order.removeFromOrder(item);
};

this.totalPrice = function() {
return Order.total();
};
}).controller('CartCtrl', function($scope, Order) {
$scope.items = Order.items;

$scope.$watchCollection('items', function() {
$scope.totalPrice = Order.totalPrice().toFixed(2);
}.bind(this));
});

<nav>
// Õû¸öÒ³ÃæÖ»ÓÐÕâÀïÐèÒª¸ù¾ÝÊý¾ÝÄ£Ð͵ı仯¶ø ¸Ä±äÊÓͼ UI
<div ng-controller="CartCtrl">Total Price: {{totalPrice}} </div>
</nav>
<div ng-controller="OrderCtrl as order">
<ul>
<li ng-repeat="product in order.products">
<h3>{{product.name}} - {{product.price}}</h3>
<button ng-click="order.addToOrder(product)">Add</button>
<button ng-click="order.removeFromOrder(product)">Remove</button>
</li>
</ul>
</div>

 

angularjsµÄ$watch¡¢$watchGroup¡¢$watchCollection ʹÓ÷½Ê½ Çø±ð

angular ¼¸ÖÖÊý¾ÝͨѶ»úÖÆ

var myModule = angular.module('myModule', []);
myModule.factory('mySharedService', function($rootScope) {
var sharedService = {};

sharedService.message = '';

sharedService.prepForBroadcast = function(msg) {
this.message = msg;
this.broadcastItem(); // Ö´ÐÐ ¹ã²¥
};

sharedService.broadcastItem = function() {
$rootScope.$broadcast('handleBroadcast');
};

return sharedService;
});

function ControllerZero($scope, sharedService) {
$scope.handleClick = function(msg) {
sharedService.prepForBroadcast(msg); // µ÷Óðüº¬¹ã²¥µÄº¯Êý
};

$scope.$on('handleBroadcast', function() {
$scope.message = sharedService.message;
});
}

function ControllerOne($scope, sharedService) {
$scope.$on('handleBroadcast', function() {
$scope.message = 'ONE: ' + sharedService.message;
});
}

function ControllerTwo($scope, sharedService) {
$scope.$on('handleBroadcast', function() {
$scope.message = 'TWO: ' + sharedService.message;
});
}

ControllerZero.$inject = ['$scope', 'mySharedService'];

ControllerOne.$inject = ['$scope', 'mySharedService'];

ControllerTwo.$inject = ['$scope', 'mySharedService'];

 

 
   
2238 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì