Upgrade to Pro — share decks privately, control downloads, hide ads and more …

jQuery vs AngularJS, dochi?

jQuery vs AngularJS, dochi?

大澤木小鐵

December 05, 2013
Tweet

More Decks by 大澤木小鐵

Other Decks in Programming

Transcript

  1. <!DOCTYPE html>! <html>! <body>! ! <ul>! <li><a href="#">Home</a></li>! <li><a href="#">Profile</a></li>!

    <li><a href="#">Messages</a></li>! <li><a href="#">Settings</a></li>! </ul>! ! <p>Click Me</p>! ! </body>! </html>! HTML 結構 http://goo.gl/CAja7s
  2. 程式碼 $(function () {! var $menu = $('body > ul');

    // 找到選單! var $button = $('body > p'); // 找到按鈕! ! $button.on('click', function () {! $menu.slideToggle(); // 切換上下滑效果! });! });! http://goo.gl/N4nLtS
  3. var $menu = $('#menu');! var $button = $('.button'); <ul id="menu">

    ... </ul>! <p class="button"> ... </p> 改⽤用 id / class
  4. 程式運作⽅方式 1. 利⽤用變數 isClosed 來記住
 ⺫⽬目前選單呈現狀態。 2. 透過 ng-click 來綁定

    p 標籤的事件,
 以決定 isClosed 的值。 3. 透過 ng-class 與 isClosed 
 來決定要不要顯⽰示選單。
  5. 程式碼 <!DOCTYPE html>! <html>! <body ng-app ng-init="isClosed=true">! ! <ul class="closed"

    ng-class="{ closed: isClosed }">! <li><a href="#">Home</a></li>! <li><a href="#">Profile</a></li>! <li><a href="#">Messages</a></li>! <li><a href="#">Settings</a></li>! </ul>! ! <p ng-click="isClosed = !isClosed">Click Me</p>! ! <script src="angular.min.js"></script>! </body>! </html>! http://goo.gl/Fjo52H
  6. CSS3 transition ul {
 ...! overflow-y: hidden;! max-height: 500px;! transition-property:

    all;! transition-duration: 1s;! }! ul.closed {! max-height: 0;! }! http://goo.gl/Fjo52H
  7. HTML 結構 <!DOCTYPE html>! <html>! <body>! ! <p>Current Value: <span>1</span></p>!

    ! <p><input type="range" value="1" ! min="1" max="10" /></p>! <p><input type="text" value="1" /></p>! ! </body>! </html>! http://goo.gl/wUhIim
  8. 程式運作⽅方式 1. 利⽤用變數 val 來記住⺫⽬目前的數值。 2. 透過 ng-bind 將 val

    變數綁定⾄至
 span 標籤顯⽰示。 3. 透過 ng-model 將 val 變數與
 input / span 標籤做雙向資料綁定 
 (Two Way Data-Binding) 。
  9. 程式碼 http://goo.gl/Tbx6UD <!DOCTYPE html>! <html ng-app>! <body ng-init="val=1">! ! <p>Current

    Value: <span ng-bind="val">1</span></p>! <p><input type="range" min="1" max="10"! ng-model="val" /></p>! <p><input type="text" ng-model="val" /></p>! ! <script src="angular.min.js"></script>! </body>! </html>!
  10. 程式運作⽅方式 1. 利⽤用變數 val 來記住⺫⽬目前的數值。 2. 當操作 slider 元件時,透過 input

    事件
 來更新其他元件的內容或值。 3. 當操作 text 元件時,透過 keyup 事件
 來更新其他元件的內容或值。
  11. 程式碼 http://goo.gl/nhwtyN (function () {! var val = 1;! var

    $span = $('span').text(val);! var $slider = $('input[type=range]').val(val);! ! ! $slider.on('input', function () {! val = $(this).val(); // 更新 val 數值! $span.text(val); // 同步 $span 內容! ! });! ! ! ! ! ! ! })();
  12. 程式碼 (function () {! var val = 1;! var $span

    = $('span').text(val);! var $slider = $('input[type=range]').val(val);! var $text = $('input[type=text]').val(val);! ! $slider.on('input', function () {! val = $(this).val(); // 更新 val 數值! $span.text(val); // 同步 $span 內容! $text.val(val); // 同步 $text 值! });! ! $text.on('keyup', function () {! val = $(this).val(); // 更新 val 數值! $span.text(val); // 同步 $span 內容! $slider.val(val); // 同步 $slider 值! });! })(); http://goo.gl/nhwtyN
  13. val $span $text new element $slider new element new element

    程式碼⾏行數! ⼤大爆炸!!
  14. jQuery AngularJS 主要開發⽅方式 盡可能不修改 HTML
 將⾴頁⾯面邏輯寫在 JS 中 HTML 為主,

    JS 為輔 適⽤用場合 畫⾯面特效 互動表單 元素特效 透過 JavaScript 計算 CSS3
 (或 jQuery-like API 輔助) 擴充機制 plugins directives IE ⽀支援度 IE6 以上 (1.x) IE8 以上