??xml version="1.0" encoding="utf-8" standalone="yes"?>最近97中文超碰在线,夜色资源站国产www在线视频,国产精品久久久乱弄http://www.aygfsteel.com/paulwong/category/54396.htmlzh-cnSat, 15 Jan 2022 01:54:04 GMTSat, 15 Jan 2022 01:54:04 GMT6020 个有用的 Angular.js 工具http://www.aygfsteel.com/paulwong/archive/2015/08/12/426743.htmlpaulwongpaulwongWed, 12 Aug 2015 05:32:00 GMThttp://www.aygfsteel.com/paulwong/archive/2015/08/12/426743.htmlhttp://www.aygfsteel.com/paulwong/comments/426743.htmlhttp://www.aygfsteel.com/paulwong/archive/2015/08/12/426743.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/426743.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/426743.html
shirleywong
shirleywong
译?1周前

0人顶

?/span> 译的不错哦!

Angular.js 开发最?IDE

Angular.js 需要的大部分集成开发环境(IDEQ和轻量U的~辑器列在了下面?/p>

Webstorm

Webstorm是一个出色的代码~辑器,它完全理解工E,可以ZQ何类型的|站提供高质量的代码。它支持所有最行最新的|站开发技术。用这个工具开发网站,可以很好地集成单Ҏ程?nbsp;

Aptana

Aptana 是一具集成开发环境,可以帮助你优雅地创徏|站应用。用它做ؓ AngularJS 的集成开发工P你需要在 Eclipse 商店Ȁz?AngularJS Eclipse 扩展?/p>

wancheng
wancheng
译?1周前

0人顶

?/span> 译的不错哦!

文本~辑?Sublime

?AngularJS Web 开发者来_方便的文本编辑工h Sublime。它帮助E序员用快h式或几个按键实现~码。它h很强的适应性,可以定制Mcd的编E环境。它也可以按照你的意愿分块编辑。它q可以轻村֜在项目之间切换,所有的修改都将自动保存在各自的目中?/p>

Angular.js 的专用测试工?br style="margin: 0px; padding: 0px;" />

试是开发的重要l成部分Q无论对于?Angular.js q是M其他软g都是如此。下面的工具可以帮助你简化采?Angular.js 开发的应用E序的测试?/p>

q些工具都是在线 JavaScript 试工具的好伴G?/p>

Protractor

Protractor 是一个端到端的测试框Ӟ贯穿?AngularJSQ是一个完全自动化的测试工兗它可以q行在真实的览器中试你的应用E序。它使用?nbsp;WebDriverQMocha, jasmine, Node.js, selenium ?a target="_blank" rel="nofollow" style="margin: 0px; padding: 0px; color: #3e62a6; outline: 0px;">cucumber {都使用的伟大的技术?/p>

当所有的待处理网Q务完成时Q它会自动用AngularJS的应用进行通信。所以,你在试时不需要用等待或睡眠命o?/p>

Iam方
Iam方
译?1周前

0人顶

?/span> 译的不错哦!

Jasmine

Jasmine 是一个行为驱动开发框Ӟ专ؓ Javascript 用户创徏。它提供了基本的试框架Qƈ且可以持l维护。所有测试都可以使用一?all-in-one 的包完成Q这?Jasmine 的主要特点,高效试你的应用?br style="margin: 0px; padding: 0px;" />
q个框架的一个缺Ҏ它不能感知运行^収ͼ览器)。如果配合Karma使用q个问题很容易避免?br style="margin: 0px; padding: 0px;" />
Karma 可以做ؓ试q行者配?Jasmine 使用。它是一个测试框架帮且你高效地测试应用?nbsp;

Code Orchestra

它是一个绝Ҏ义上的前端开发工具帮助你创徏和测试网站应用。你可以实时写代码,Ҏ修改代码Q以同样的格式保存代码。通过q个工具修改后的代码会自动布|到q行中的应用?/p>

wancheng
wancheng
译?1周前

0人顶

?/span> 译的不错哦!

最好的 Angular.js 函数?br style="margin: 0px; padding: 0px;" />

下面是一些有用的库,它们可以增强 angular.js 框架的能力,对开发者有所帮助。没有必要从头构建那些可能已l成为开放源码的函数库?br style="margin: 0px; padding: 0px;" />

CodePen

对于所?HTMLQCSS ?JavaScript 的前端开发者,CodePen 是一Ƒ֮的~辑工具。这个工具可以最大限度地减少对网站的创徏、测试和完善的繁琐的|页开发工作。它是一个协作的在线~程环境?/p>

Web 开发h员可以清晰地跨^台实时查看。它有一个浏览器中的代码~辑器,可以自动地迅速地上传多个文g。这个功能可协助 Web 开发h员在几秒的时间内创徏一个新的代码?/span>

Angular Fire

使用 Angular FireQ可以轻村֜帮助你开?AngularJS 的应用后台。AngularJS l定?Firebase 已经正式?Angular Fire 支持。Firebase 是一个基于云计算的^収ͼ可以很容易地集成实时应用和快速创建后台?/p>

?Firebase ?Angular Fire l合在一P它们有助于以更快的速度同步数据和提供良好的用户理服务。它q提供了一个三向的数据l定、用戯n份验证和静态托?/p>

Iam方
Iam方
译?7天前

0人顶

?/span> 译的不错哦!

AngularUI

AngularJS 以高效率创徏单页面应用而出? 创徏q些单页面应用时候,我们需要一个灵zȝ路由Q这个优U的AngularJS框架是构Z个全面的UIlg俗称ui-router?nbsp;它能Ҏ应用E序的状态提供一个简单的D和改变视?而不仅仅是基于URL?br style="margin: 0px; padding: 0px;" />AngularUIq包含非常多的UIlgQ这些组件是使用原生指o像ui—maps,ui-calendar,ui-Bootstrap创徏的。这些UIlg和指令可以更快徏设Angular|站

UI Bootstrap

UI Bootstrap是一个不同寻常的AngularUIlg,它能帮助你创建基于智能手机的web应用E序Q而且用户体验不错。这个UIlg提供的AngularJS原生指o完全兼容Twitte Bootstrap

成熟的毛毛虫
成熟的毛毛虫
译?5天前

1人顶

?/span> 译的不错哦!

Angular.js 有用的扩展和工具

下面是一?Angular.js 扩展Q可以满一些特D应用之需?/p>

Ng-Inspector

Ng-Inspector 是一个优U的浏览器插gQ支?FirefoxQChrome ?Safari,复用它可以创Z个探控刉板,方便开发,调试 AngularJS 应用Q它提供了完整的辅助功能?/p>

使用它可以更方便的和你的应用交互Q还可以实时更新。它q可以看到全部范围内的层ơ结构,模型Q类型和倹{点Mx的一个范_它会高亮昄相应?DOM l点?/p>

AngularJS Batarang

你可以?AngularJS Batarang 来调试你?AngularJ S应用Q它是一个专?Chrome 提供的插件。它帮助你改善应用性能。还可能衡量调节性能的进度?/p>

wancheng
wancheng
译?4天前

0人顶

?/span> 译的不错哦!

Restangular

AngularJS 独有的一个服务是 RestangularQ它可以帮助您轻村ֺ对各U要求,例如获取、发送、删除以及把数据存入数据库。它对于所有从 RESTful API 中大规模存取数据?AngularJS 应用都很有必要?/p>

Generator Angular - 一个有用的工具

Yeomen Generator

你可以很Ҏ地开始一个具有合理的默认值和最好的用例的项目。徏立这L Angular 应用Q这?Yeomen generator 工具是非常有用的。它只需几条l端的命令,便加速了 AngularJS 应用的开发过E。这个工h非常有用的。这些专用的生成工具有助于应用了解目的有关信息,q有助于开发和试应用E序?br style="margin: 0px; padding: 0px;" />

Iam方
Iam方
译?3天前

0人顶

?/span> 译的不错哦!

Angular Deckgrid

Angular Deckgrid 可以Z提供响应度和颜g高的应用Q可以适配不同的移动终端。轻量cȝ石结构易于创建灵zȝ表格Q高效创建图片展C?nbsp;

Radian

Radian 是一个优U的框Ӟ使用它只需要少量的讄可以开?AngularJS 目。在多h开发项目中它是一个理想的选择?/p>

Lumx

Lumx 以快速简单的方式帮助你创建简单而优雅的应用?q个可响应式前端框架是基于AngularJS 和Google 材料设计规范。这个工具可嵌入最新的技术,?Sass 预处理器QAngularJS ?JQueryQ能极大地提?web 应用的性能?/p>

wancheng
wancheng
译?1天前

0人顶

?/span> 译的不错哦!

Angular Gettext

你可以用p~码Q在~码需要被译的地方加上注解。Angular Gettext 工具׃自动译那些独立的部分。这?AngularJS 非常单而强大的译支持工具?/p>

NgDocs

AngularJS 框架内置 ngDocs 工具可以化你目文档和参考手册的相关工作。这Ƒ֟?Android 的工具也能提供给所有新手一些容易跟q的教程?/p>

叶秀? title=

?/span> 译的不错哦!

NgTables

无论是简单还是复杂的 Web 应用Q在 AngularJS 框架中很Ҏ创徏一个表|然后通过实用?ngTables 工具q行高效的管理。ngTable ?AngularJS 表格指oQ支持排序,qo和分,在编译步骤中自动生成带有标题和过滤器的标题行?/p>

ngTable 支持定制qo选项Q表格分l,表格外部数据控制 {等功能?/p>

ȝ来说Q这些都是创ZQ?AngularJS Web 应用的,最有用的工具集合。用好这些工具可以帮助你L高效的创?AngularJS 目?/p>



paulwong 2015-08-12 13:32 发表评论
]]>
2013q度最强AngularJS资源合集http://www.aygfsteel.com/paulwong/archive/2014/07/16/415872.htmlpaulwongpaulwongWed, 16 Jul 2014 01:01:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/07/16/415872.htmlhttp://www.aygfsteel.com/paulwong/comments/415872.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/07/16/415872.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/415872.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/415872.htmlAngularJS是Google开源的一ƾJavaScript MVC框架QI补了HTML在构建应用方面的不Q?/strong>光过使用指oQdirectivesQ结构来扩展HTML词汇Q开发者可以用HTML来声明动态内容,从而得Web开发和试工作变得更加Ҏ?/p>

AngularJS诞生以来Q吸引了大量的目光,也迅速成ZWeb开发领域的新宠。本文整理了2013q度一些非常有价值的AngularJS相关教程和资?/strong>Q如果你想了解AngularJS或正在用AngularJSQ那么这些资源肯定会Z的学习和q阶q程带来帮助?/p>

一、了解AngularJS

二、中文资?/strong>

1. 中文pd资源

2. 其他单篇文章

3. 中文书籍

三、英文资?/strong>

1. AngularJS入门教程

2. AngularJS指o学习

3. AngularJS应用开发实?/strong>

4. AngularJS游戏开发实?/strong>

5. AngularJS工作程和测?/strong>

6. AngularJS书籍



paulwong 2014-07-16 09:01 发表评论
]]>
通过l端调试 AngularJS 应用http://www.aygfsteel.com/paulwong/archive/2014/07/11/415691.htmlpaulwongpaulwongFri, 11 Jul 2014 00:11:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/07/11/415691.htmlhttp://www.aygfsteel.com/paulwong/comments/415691.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/07/11/415691.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/415691.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/415691.html阅读全文

paulwong 2014-07-11 08:11 发表评论
]]>
angular-smartyhttp://www.aygfsteel.com/paulwong/archive/2014/06/19/414918.htmlpaulwongpaulwongThu, 19 Jun 2014 01:01:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/06/19/414918.htmlhttp://www.aygfsteel.com/paulwong/comments/414918.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/06/19/414918.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/414918.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/414918.html
使用ҎQ?br />
<html>
<head>
    <title>angular-smarty demo</title>
    <link rel="stylesheet" type="text/css" href="smarty.css"></link>
</head>
<body ng-controller="SmartyController">
    <div class="container-main">
        <h1>angular-smarty demo</h1>
        <div class="container-autocomplete">
            <input type="text" smarty-input select="setSelected(x)"
                index
="selected" list-items="suggestions" close="suggestionPicked()"
                selection-made
="selectionMade" ng-model="prefix"></input>
            <div smarty-suggestions-box></div>
            <input type="text" focus-me focus-when="{{selectionMade}}"></input>
        </div>
    </div>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.js"></script>
<script type="text/javascript" src="smarty-config.js"></script>
<script type="text/javascript" src="smarty.js"></script>
<script type="text/javascript">
    $(
function() {
        angular.bootstrap(angular.element(
"body"), ["angular-smarty"]);
    });
</script>
</html>

https://github.com/thumbtack/angular-smarty

paulwong 2014-06-19 09:01 发表评论
]]>
释ANGULARJShttp://www.aygfsteel.com/paulwong/archive/2014/06/08/414508.htmlpaulwongpaulwongSun, 08 Jun 2014 03:47:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/06/08/414508.htmlhttp://www.aygfsteel.com/paulwong/comments/414508.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/06/08/414508.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/414508.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/414508.html
  • 导入ANGULARJS?br />
    <script src="lib/angular/angular.js"></script>

  • 通知ANGULARJS引擎开始工作,q设|作用域
    <html ng-app>

  • q行一个CONTROLLERQ如果里面有讄模型的数据的Q就模型保存下来,此CONTROLLER仅仅可以存取BODY内的所有数?br />
    <body ng-controller="PhoneListCtrl">

  • CONTROLLER代码Q其?scope是ANGULARJS理的对象,q时注入到此方法中
    function PhoneListCtrl($scope) {
      $scope.phones = [
        {"name": "Nexus S",
         "snippet": "Fast just got faster with Nexus S."},
        {"name": "Motorola XOOM™ with Wi-Fi",
         "snippet": "The Next, Next Generation tablet."},
        {"name": "MOTOROLA XOOM™",
         "snippet": "The Next, Next Generation tablet."}
      ];
    }

  • 如遇到双大括L标签Q则q行里面的表辑ּQƈ结果更新至DOM昄
    {{phone.name}}

  • Ҏ数组中ITEM的多,产生相对应的LI标签
    <ul>
        <li ng-repeat="phone in phones">
          {{phone.name}}
        <p>{{phone.snippet}}</p>
        </li>
      </ul>

  • 此标{?指o)会将INPUT的VALUEg一个叫QUERY的对象进行双向绑定,M一方的改变都会同步臛_?br />
    <input ng-model="query">

  • 使用外部数据Q?http是ANGULARJS理的提供HTTP讉K服务的对象,$scope.phones是往$scope里面新增一个phonesQƈ赋?br />
    function PhoneListCtrl($scope, $http) {
      $http.get('phones/phones.json').success(function(data) {
        $scope.phones = data;
      });

    }



  • paulwong 2014-06-08 11:47 发表评论
    ]]>
    ANGULARJS资源http://www.aygfsteel.com/paulwong/archive/2014/06/08/414504.htmlpaulwongpaulwongSun, 08 Jun 2014 01:38:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/06/08/414504.htmlhttp://www.aygfsteel.com/paulwong/comments/414504.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/06/08/414504.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/414504.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/414504.htmlhttp://www.ituring.com.cn/minibook/303


    AngularJS O'Reilly book
    https://github.com/shyamseshadri/angularjs-book

    angular-phonecat
    https://github.com/angular/angular-phonecat


    教程
    http://scotch.io/tutorials


    http://my.oschina.net/blogshi/blog?catalog=495077


    javaee7-angular
    https://github.com/radcortez/javaee7-angular



    paulwong 2014-06-08 09:38 发表评论
    ]]>
    AngularJS 最佛_?/title><link>http://www.aygfsteel.com/paulwong/archive/2014/06/05/414436.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 05 Jun 2014 08:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2014/06/05/414436.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/414436.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2014/06/05/414436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/414436.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/414436.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"><a target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">AngularJS</a> 是一?Web 应用框架Q它实现?a title="Z RESTful 接口的前?MVC 架构" target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">前端?MVC 架构</a>Q能让开发h员很方便地实C务逻辑?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">举个栗子Q要做到下面的效果,以前可能需要写一q串?JavaScript 代码l定 N 多事件。而?AngularJS 框架Q一?JavaScript 都不用写p实现了,奇吧?<a title="Try run" target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">查看演示</a>?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"><a style="margin: 0px; padding: 0px; color: #ed1e24; outline: none; text-decoration: none;"><img src="http://cdn.lovelucy.info/wordpress/wp-content/uploads/2013/06/angularjs-demo.gif" alt="angularjs-demo" width="240" height="110" size-full="" wp-image-1695"="" style="margin: 0px auto; padding: 0px; border: 0px; display: block;" /></a></p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 813px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">script</span> <span style="margin: 0px; padding: 0px; color: #000066;">type</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"text/javascript"</span> <span style="margin: 0px; padding: 0px; color: #000066;">src</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"</span>><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">script</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span> data-ng-app></span> 单hQ?<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">input</span> <span style="margin: 0px; padding: 0px; color: #000066;">type</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"number"</span> <span style="margin: 0px; padding: 0px; color: #000066;">min</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #cc66cc;">0</span> ng-model<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"price"</span> ng-init<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"price = 299"</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">br</span>></span> 数量Q?<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">input</span> <span style="margin: 0px; padding: 0px; color: #000066;">type</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"number"</span> <span style="margin: 0px; padding: 0px; color: #000066;">min</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #cc66cc;">0</span> ng-model<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"quantity"</span> ng-init<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"quantity = 1"</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">br</span>></span> MhQ?{{ quantity * price }} <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q得益于 AngularJS 中的双向数据l定Ҏ?Two Way Data-Binding)Q将 Model ?View 自动兌了v来,在更复杂的业务场景下Q还有代码分ȝ好处Q将 DOM 操作和应用逻辑解耦,非常实用?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"></p><div style="margin: 0px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #ffffff;"><div aligncenter"="" style="margin: 0px auto;"><iframe width="300" height="250" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" id="aswift_0" name="aswift_0" style="margin: 0px; padding: 0px; left: 0px; position: absolute; top: 0px;"></iframe></div></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"></p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">不过没有银弹Q和其他框架一PAngularJS 也有它的局限。CRUD cd的操作是它所擅长的,x看以前写q的理后台Q几乎大部分都是从数据库中读取数据,然后呈现在页面上Q进行各U增删改查。AngularJS U定了一套规范(<a title="U定优于配置——软g开发的U原? target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">U定优于配置</a>Q,于是你可以很便捷地操作数据。而在其他斚wQ例如开发复杂的 Web 游戏QAngularJS 则是无用武之C?/p><h2>一、AngularJS 中的_Ҏ?/h2><h3>双向l定</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">上面的例子已l说明了Q我们可以像 PHP Smarty 模板一样在 HTML 中写表达式,?{{ ?}} 包v来。在 AngularJS 里,View ?Model 是在 Controller 里面l定的,所以无Z?View 的表单中修改了内容,q是?Controller 里通过代码修改?Model |两边都会x发生变化Q同步更新。因?AngularJS 会监?QwatchQ?Model 对象的变化,随时反映?View 中?/p><h3>Filter</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">Filter cM Unix 里面?| 道概念QAngularJS 把它搬到了前端。还是D个例子,你们感受一?#8212;—</p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 644px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span>{{ 9999 | number }}<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span>{{ 9999+1 | number:2 }}<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span>{{ 9*9 | currency }}<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span>{{ 'Hello World' | uppercase }}<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">输出l果Q?/p><pre style="padding: 0.8em; overflow: hidden; white-space: pre-wrap; font-size: 12px; font-family: 'Courier New', Courier, 'Lucida Console', Monaco, 'DejaVu Sans Mono', 'Nimbus Mono L', 'Bitstream Vera Sans Mono'; width: 515.1875px; border: 1px solid #dddddd; color: #4e4e4e; line-height: normal; background-color: #ffffff;">9,999 10,000.00 $81.00 HELLO WORLD </pre><h2>二、AngularJS 中的一?#8220;?#8221;</h2><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">׃q去?JavaScript 的习惯ӞZ很容易掉q一?AngularJS 的陷阱里。下面的内容假设你已l了解前?MVC 概念Qƈ?AngularJS 有了一定经验,初学者读h可能比较艰深晦ӆ?/p><h3>DOM 操作</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">避免使用 jQuery 来操?DOMQ包括增加元素节点,U除元素节点Q获取元素内容,隐藏或显C元素。你应该使用 directives 来实现这些动作,有必要的话你q要~写自己?directives?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">如果你感到很难改变习惯,那么考虑从你的网中U除 jQuery 吧。真的,AngularJS 中的 <code style="margin: 0px; padding: 0px;">$http</code> 服务非常强大Q基本可以替?jQuery ?ajax 函数Q而且 AngularJS 内嵌?jQLite —— 它内部实现的一?jQuery 子集Q包含了常用?jQuery DOM 操作ҎQ事件绑定等{。但qƈ不是说用了AngularJS ׃能用 jQuery 了。如果你的网|载入 jQuery 那么 AngularJS 会优先采用你?jQueryQ否则它?fall back ?jQLite?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">需要自q?directives 的情况通常是当你用了W三方的 jQuery 插g。因为插件在 AngularJS 之外对表单D行更改,q不能即时反应到 Model 中。例如我们用得比较多?jQueryUI <a target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">datepicker</a> 插gQ当你选中一个日期后Q插件会日期字W串填到 input 输入框中。View 改变了,却ƈ没有更新 ModelQ因?code style="margin: 0px; padding: 0px;">$('.datepicker').datepicker();</code> q段代码不属?AngularJS 的管理范围。我们需要编写一个directive 来让 DOM 的改变即时更新到 Model 里?/p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 644px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">var</span> directives <span style="margin: 0px; padding: 0px; color: #339933;">=</span> angular.<span style="margin: 0px; padding: 0px; color: #660066;">module</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #3366cc;">'directives'</span><span style="margin: 0px; padding: 0px; color: #339933;">,</span> <span style="margin: 0px; padding: 0px; color: #009900;">[</span><span style="margin: 0px; padding: 0px; color: #009900;">]</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span>   directives.<span style="margin: 0px; padding: 0px; color: #660066;">directive</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #3366cc;">'datepicker'</span><span style="margin: 0px; padding: 0px; color: #339933;">,</span> <span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">function</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span> <span style="margin: 0px; padding: 0px; color: #009900;">{</span> <span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">return</span> <span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">function</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span>scope<span style="margin: 0px; padding: 0px; color: #339933;">,</span> element<span style="margin: 0px; padding: 0px; color: #339933;">,</span> attrs<span style="margin: 0px; padding: 0px; color: #009900;">)</span> <span style="margin: 0px; padding: 0px; color: #009900;">{</span> element.<span style="margin: 0px; padding: 0px; color: #660066;">datepicker</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #009900;">{</span> inline<span style="margin: 0px; padding: 0px; color: #339933;">:</span> <span style="margin: 0px; padding: 0px; color: #003366; font-weight: bold;">true</span><span style="margin: 0px; padding: 0px; color: #339933;">,</span> dateFormat<span style="margin: 0px; padding: 0px; color: #339933;">:</span> <span style="margin: 0px; padding: 0px; color: #3366cc;">'dd.mm.yy'</span><span style="margin: 0px; padding: 0px; color: #339933;">,</span> onSelect<span style="margin: 0px; padding: 0px; color: #339933;">:</span> <span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">function</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span>dateText<span style="margin: 0px; padding: 0px; color: #009900;">)</span> <span style="margin: 0px; padding: 0px; color: #009900;">{</span> <span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">var</span> modelPath <span style="margin: 0px; padding: 0px; color: #339933;">=</span> $<span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #000066; font-weight: bold;">this</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span>.<span style="margin: 0px; padding: 0px; color: #660066;">attr</span><span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #3366cc;">'ng-model'</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span> putObject<span style="margin: 0px; padding: 0px; color: #009900;">(</span>modelPath<span style="margin: 0px; padding: 0px; color: #339933;">,</span> scope<span style="margin: 0px; padding: 0px; color: #339933;">,</span> dateText<span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span> scope.$apply<span style="margin: 0px; padding: 0px; color: #009900;">(</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span> <span style="margin: 0px; padding: 0px; color: #009900;">}</span> <span style="margin: 0px; padding: 0px; color: #009900;">}</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span> <span style="margin: 0px; padding: 0px; color: #009900;">}</span> <span style="margin: 0px; padding: 0px; color: #009900;">}</span><span style="margin: 0px; padding: 0px; color: #009900;">)</span><span style="margin: 0px; padding: 0px; color: #339933;">;</span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">然后?HTML 中引入这?direcitve</p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 644px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">input</span> <span style="margin: 0px; padding: 0px; color: #000066;">type</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"text"</span> datepicker ng-model<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"myObject.myDateValue"</span> <span style="margin: 0px; padding: 0px; color: #66cc66;">/</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">说白?directive 是?HTML 里写自定义的标签属性,辑ֈ插g的作用。这U声明式的语法扩展了 HTML?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">需要说明的是,有一?nbsp;<a title="Angular UI" target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">AngularUI</a> 目提供了大量的 directive l我们用,包括 Bootstrap 框架中的插g以及Z jQuery 的其他很热门?UI lg。我之前说过 AngularJS 的社区很z跃嘛,生态系l健全?/p><h3>ngOption 中的 value</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q是个大坑。如果你L?ngOption 生成?nbsp;<code style="margin: 0px; padding: 0px;"><select></code> 中的 <code style="margin: 0px; padding: 0px;"><option></code> 的选项|每个 <code style="margin: 0px; padding: 0px;"><option value="xxx"></code> ?value 部分Q,那绝Ҏ枉费心机。因里的值永q都会是 AngularJS 内部元素的烦引,q不是你所指定的表单选项倹{?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q是要{变观念,AngularJS 已经不再用表单进行数据交互了Q而是?Model。?$http 来提?ModelQ在 php 中则使用 <code style="margin: 0px; padding: 0px;">file_get_contents('php://input')</code> 来获取前端提交的数据?/p><h3>{{ }} 的问?/h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">在页面初始化的时候,用户可能会看?{{ }}Q然后闪烁一下才出现真正的内宏V?br style="margin: 0px; padding: 0px;" />解决办法Q?/p><ol style="margin: 0.4em 0px 1em; padding: 0px; line-height: 19.5px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; background-color: #ffffff;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">使用 ng-cloak directive 来隐藏它</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">使用 ng-bind 替代 {{ }}</li></ol><h3>界面与业务逻辑分离</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">Controller 不应该直接引?DOMQ而应该控?view 的行为。例?#8220;如果用户操作?XQ应该发生什么事?#8221;Q?#8220;我从哪里可以获得 XQ?#8221;</p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">Service 在大部分情况下也不应该直接引?DOMQ它应该是一个单例(singletonsQ,独立于界面,?view 的逻辑无关。它的角色只?#8220;?X 操作”?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">DOM 操作应该攑֜ directives 里面?/p><h3>量复用已有功能</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">你所写的功能很可?AngularJS 已经实现了,有一些代码是可以抽象出来复用的,使用?Angular 的方式。M是很多 jQuery 的繁琐代码可以被替代?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong style="margin: 0px; padding: 0px;">1. <code style="margin: 0px; padding: 0px;">ng-repeat</code></strong></p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">ng-repeat 很有用。当 Ajax 从服务器获得数据后,我们l常使用 jQuery Q比如上面讲q的例子Q?向某?HTML 容器节点中添加更多的元素Q这?AngularJS 里是不好的做法。有?ng-repeat 一切就变得非常单了。在你的 $scope 中定义一个数l?QmodelQ?来保存从服务器拉取的数据Q然后?ng-repeat 它?DOM l定卛_。下面的例子初始化定义了 friends q个 model</p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 644px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span> ng-init<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"friends = [{name:'John', age:25}, {name:'Mary', age:28}]"</span>></span> I have {{friends.length}} friends. They are: <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">ul</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">li</span> ng-repeat<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"friend in friends"</span>></span> [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">li</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">ul</span>></span> <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">昄l果</p><pre style="padding: 0.8em; overflow: hidden; white-space: pre-wrap; font-size: 12px; font-family: 'Courier New', Courier, 'Lucida Console', Monaco, 'DejaVu Sans Mono', 'Nimbus Mono L', 'Bitstream Vera Sans Mono'; width: 515.1875px; border: 1px solid #dddddd; color: #4e4e4e; line-height: normal; background-color: #ffffff;">I have 2 friends. They are: [1] John who is 25 years old. [2] Mary who is 28 years old. </pre><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong style="margin: 0px; padding: 0px;">2. <code style="margin: 0px; padding: 0px;">ng-show</code></strong></p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">ng-show 也很有用。?jQuery 来根据条件控制界面元素的昄隐藏Q这很常见。但?Angular 有更好的方式来做到这一炏Vng-show Q以?ng-hideQ?可以Ҏ布尔表达式来军_隐藏和显C。在 $scope 中定义一个变量:</p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 644px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span> ng-show<span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"!loggedIn"</span>></span> 点击 <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">a</span> <span style="margin: 0px; padding: 0px; color: #000066;">href</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"#/login"</span>></span>q里<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">a</span>></span> d <span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">cM的内|?directives q有 ng-disabledQ?ng-switch {等Q用于条件控Ӟ语法z,都很强大?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;"><strong style="margin: 0px; padding: 0px;">3. <code style="margin: 0px; padding: 0px;">ng-class</code></strong></p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">ng-class 用于条g性地l元素添?classQ以前我们也l常?jQuery 来实现。Angular 中的 ng-class 当然更好用了Q例子:</p><div style="margin: 0px 0px 1.5em; color: #110000; overflow-y: hidden; overflow-x: auto; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; box-shadow: #999999 3px 3px 3px; -webkit-box-shadow: #999999 3px 3px 3px; width: 644px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; line-height: normal; background-color: #f9f9f9;"><table style="margin: 0px; padding: 0px; border-collapse: collapse; width: 771px;"><tbody style="margin: 0px; padding: 0px;"><tr style="margin: 0px; padding: 0px;"><td style="margin: 0px; padding: 0px; border: 0px; vertical-align: top; background-color: #eeeeee;"><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.8em; overflow: visible; font-size: 12px; width: auto; border: 1px solid #dddddd; float: none; clear: none; line-height: 1.333; background-color: transparent;"><span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span> ng-<span style="margin: 0px; padding: 0px; color: #000066;">class</span><span style="margin: 0px; padding: 0px; color: #66cc66;">=</span><span style="margin: 0px; padding: 0px; color: #ff0000;">"{ errorClass: isError, warningClass: isWarning, okClass: !isError && !isWarning }"</span>></span>...<span style="margin: 0px; padding: 0px; color: #009900;"><<span style="margin: 0px; padding: 0px; color: #66cc66;">/</span><span style="margin: 0px; padding: 0px; color: #000000; font-weight: bold;">div</span>></span></pre></td></tr></tbody></table></div><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">在这?ng-class 接受一?object 对象Qkey ?CSS class 名,gؓ $scope 变量控制的条件表辑ּQ其他类似的内置 directives q有 ng-class-even ?ng-class-oddQ很实用?/p><h3>$watch ?$apply</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">AngularJS 的双向数据绑定是最令h兴奋的特性了Q然而它也不是全能的法Q在某些情况下你需要做一些小的修正?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">当你使用 ng-modelQ?ng-repeat {等来绑定一个元素的值时Q?AngularJS 为那个值创Z一?$watchQ只要这个值在 AngularJS 的范围内有Q何改变,所有的地方都会同步更新。而你在写自定义的 directive Ӟ你需要定义你自己?$watch 来实现这U自动同步?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">有时候你在代码中改变?model 的|view 却没有更斎ͼq在自定义事件绑定中l常遇到。这时你需要手动调?scope.$apply() 来触发界面更新。上?datepicker 的例子已l说明了q一炏V第三方插g可能会有 call backQ我们也可以把回调函数写成匿名函C为参C?apply()中?/p><h3>?ng-repeat 和其?directives l合h</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">ng-repeat 很有用,不过它和 DOM l定了,很难在同一个元素上使用其他 directives Q比?ng-showQ?ng-controller {等Q?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">如果你想Ҏ个@环用某?directiveQ你可以?repeat 外再包一层父元素?directive 写在那儿Q如果你惛_循环内部的每一个元素用某?directiveQ那么把它放?ng-repeat 的一个子节点上即可?/p><h3>Scope</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">Scope ?templates 模板中应该是 read-only 的,而在 controller 里应该是 write-only 的。Scope 的目的是引用 modelQ而不是成?model。model 是我们定义?JavaScript 对象?/p><h3>$rootScope 是可以用的,不过很可能被滥用</h3><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">Scopes ?AngularJS 中Ş成一定的层关系Q树状结构必然有一个根节点。通常我们用不到它Q因为几乎每?view 都有一?controller 以及相对应的自己?scope?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">但偶有一些数据我们希望全局应用在整?app 中,q时我们可以数据注?$rootScope。因为其?scope 都会l承 root scopeQ所以那些注入的数据对于 ng-show q类 directive 都是可用的,像是在本地 $scope 中的变量一栗?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">当然Q全局变量是邪恶的Q你必须很小心地使用 $rootScope。特别是不要用于代码Q而仅仅用于注入数据。如果你非常希望?$rootScope 写一个函敎ͼ那最好把它写?service 里,q样只有用到的时候它才会被注入,试h也方便些?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">相反Q如果一个函数的功能仅仅是存储和q回一些数据,׃要把它创建成一?service?/p><h2>三、AngularJS 目的目录结?/h2><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">怎样l织代码文g和目录?q恐怕是初学者一开始就会遇到的问题。AngularJS 应用开发的官方入门目<a title="Angular Seed" target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">angular-seed</a>Q其文gl构是这LQ?/p><ul style="margin: 0.4em 0px 1em; padding: 0px; line-height: 19.5px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; background-color: #ffffff;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">css/</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">img/</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">js/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">app.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">controllers.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">directives.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">filters.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">services.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">lib/</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">partials/</li></ul><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q种l构对于一个简单的单页 app 来说是可行的Q只是一旦代码中存在多个 Controller 或?ServiceQ就很难扑ֈ惌L的对象了。我们可以对文g按照业务逻辑q行拆分Q就像下面这P</p><ul style="margin: 0.4em 0px 1em; padding: 0px; line-height: 19.5px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; background-color: #ffffff;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">controllers/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">LoginController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">RegistrationController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductDetailController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">SearchResultsController.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">directives.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">filters.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">models/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">CartModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">SearchResultsModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">UserModel.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">services/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">CartService.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">UserService.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductService.js</li></ul></li></ul><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q种l构把不同的业务功能拆分为独立的文gQ条理清晎ͼ但是仍有一定的局限性。最大的问题是一个业务功能的代码分布在controllers, models, servers 三个不同目录下,要从中挑出正的文gQ徏立v代码兌Q还是有些麻烦。按照功能进行模块化划分目录l构Q应该要更ؓ合理一些:</p><ul style="margin: 0.4em 0px 1em; padding: 0px; line-height: 19.5px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; background-color: #ffffff;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">cart/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">CartModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">CartService.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">common/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">directives.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">filters.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">product/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">search/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">SearchResultsController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">SearchResultsModel.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductDetailController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">ProductService.js</li></ul></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">user/<ul style="margin: 0.4em 0px 1em; padding: 0px;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">LoginController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">RegistrationController.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">UserModel.js</li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;">UserService.js</li></ul></li></ul><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">q样也是适合 RequireJS {模块加载器的自然直观的代码l织方式?/p><p style="margin: 0px 0px 0.8em; padding: 0px; line-height: 24.309999465942383px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; background-color: #ffffff;">参考链接:</p><ul style="margin: 0.4em 0px 1em; padding: 0px; line-height: 19.5px; color: #4e4e4e; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size: 13px; background-color: #ffffff;"><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;"><a target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">AngularJS Best Practices 视频(Youtube)</a></li><li style="margin: 0px 0px 0px 2.5em; padding: 0px; list-style-position: outside;"><a target="_blank" style="margin: 0px; padding: 0px; color: #0071bb; outline: none;">前端工程的極致精品: AngularJS 開發框架介紹</a></li></ul><img src ="http://www.aygfsteel.com/paulwong/aggbug/414436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2014-06-05 16:18 <a href="http://www.aygfsteel.com/paulwong/archive/2014/06/05/414436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">ٲ</a>| <a href="http://" target="_blank">Į</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">᰸</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">޻</a>| <a href="http://" target="_blank">־</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">dz</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ѯ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ذ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>