AngularJS中數據雙向綁定(two-way data-binding)


1.切換工作目錄

git checkout step-4  #切換分支,切換到第4步
npm start  #啟動項目

2.代碼

app/index.html

復制代碼
Search: <input ng-model="query">
Sort by:
<select ng-model="orderProp">
  <option value="name">Alphabetical</option>
  <option value="age">Newest</option>
</select>


<ul class="phones">
  <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
    {{phone.name}}
    <p>{{phone.snippet}}</p>
  </li>
</ul>
復制代碼

app/controllers.js

復制代碼
var phonecatApp = angular.module('phonecatApp', []);

phonecatApp.controller('PhoneListCtrl', function($scope) {
  $scope.phones = [
    {'name': 'Nexus S',
     'snippet': 'Fast just got faster with Nexus S.',
     'age': 1},
    {'name': 'Motorola XOOM™ with Wi-Fi',
     'snippet': 'The Next, Next Generation tablet.',
     'age': 2},
    {'name': 'MOTOROLA XOOM™',
     'snippet': 'The Next, Next Generation tablet.',
     'age': 3}
  ];

  $scope.orderProp = 'age';
});
復制代碼

 

 

3.效果

按字母排序:

 

按時間排序:

很明顯,相較於step-3,step-4新增加了排序功能

 

4.原理說明

首先,添加了<select> 標簽:

<select ng-model="orderProp">
  <option value="name">Alphabetical</option>
  <option value="age">Newest</option>
</select>

其次,在filter中添加了orderBy:

 <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
    {{phone.name}}
    <p>{{phone.snippet}}</p>
  </li>

所以,根據angularjs的思想,一是model改變(可能是用戶手動選擇下拉框導致的),那么根據數據綁定原則(data-binding),view也將適時進行改變.

orderBy api:https://docs.angularjs.org/api/ng/filter/orderBy

orderBy Usage(用法)

In HTML Template Binding(在HTML中的用法)

{{ orderBy_expression | orderBy : expression : reverse}}

In JavaScript(在JS中的用法)

$filter('orderBy')(array, expression, reverse)

上面的例子是在HTML中用的,默認string類型的數據是按照字母表中數據排序的,而number數字類型的數據是按照數字大小進行排序的.

如果想要倒序,那么可以在上面的option value='-name',加上一個'-'即可.

 

5.測試

復制代碼
amosli@amosli-pc:~/develop/angular-phonecat$ npm run protractor 

> angular-phonecat@0.0.0 preprotractor /home/amosli/develop/angular-phonecat
> npm run update-webdriver


> angular-phonecat@0.0.0 preupdate-webdriver /home/amosli/develop/angular-phonecat
> npm install


> angular-phonecat@0.0.0 postinstall /home/amosli/develop/angular-phonecat
> bower install


> angular-phonecat@0.0.0 update-webdriver /home/amosli/develop/angular-phonecat
> webdriver-manager update

selenium standalone is up to date.
chromedriver is up to date.

> angular-phonecat@0.0.0 protractor /home/amosli/develop/angular-phonecat
> protractor test/protractor-conf.js


------------------------------------
PID: 5265 (capability: chrome #1)
------------------------------------

Using ChromeDriver directly...
..

Finished in 5.033 seconds
2 tests, 5 assertions, 0 failures
復制代碼

這里執行的是端到端的測試,測試代碼如下:

angular-phonecat/test/e2e/scenarios.js

  View Code

 

 

 

 

 
 
分類:  js框架
requireJS(二)
摘要: 一、前言requireJS(一)本篇主要整理requirejs的一些用法,相對比較零散。實例目錄二、優化requirejs建議我們給每一個模塊書寫一個js文件。但是這樣會增加網站的http請求,這時可利用工具打包,詳情求戳鏈接查看。三、關於define自定義模塊之前說到自定義模塊define()可接... 閱讀全文
 
posted @ 2014-05-07 10:59 cunjieliu 閱讀(377) 評論(0)  編輯
 
摘要: 一、關於requirejsrequirejs是一個用於異步加載js模塊的框架。詳細介紹的請谷歌~二、HOW TO USE首先先去官網下載requirejs.js下來,再在自己的項目中引入1 注意到data-main這個屬性,簡單的理解就是一個入口函數,用來啟動腳本的加載過程。tip:為了使這個文件加... 閱讀全文
 
posted @ 2014-05-06 15:11 cunjieliu 閱讀(544) 評論(0)  編輯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM