±à¼ÍƼö: |
±¾ÎÄÀ´×Ô¼òÊ飬ʲôÊÇ
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']; |
|