1. 程式人生 > >Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結

Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結

依賴 實現 http dsi 概念 模板 style ctr net

Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結

1. 本文範圍 1

2. Angular的長處 1

2.1. 雙向數據綁定 1

2.2. dsl 2

2.3. 依賴註入 2

2.4. 指令 2

3. 手動綁定數據spa方式以及與ajax dwr的集成 2

4. 格式化數據 2

4.1. 多字段組合格式化 3

4.2. 輸出html 4

5. 輸出作為函數參數調用 4

6. 載入完畢事件 5

7. 常見錯誤 5

7.1. Atitit.angular.js FilterProvider filter [$injector:unpr] 5

8. AngularJS適合之處 5

8.1. Angular vs jquery tmpl.js 6

9. Angular的問題 6

9.1. 不利於開發人員進行調試, 6

9.2. 學習進階難。

6

10. 參考 7

1. 本文範圍

主要使用Angular綁定一個json列表到table。。

實現mvc html 模板功能。。

2. Angular的長處

2.1. 雙向數據綁定

更加easy實現dsl

處理表單數據和編輯表格數據帶來了非常多長處

只是Jq的form序列化也是非常easy的

在Angular中,操縱數據不是通過抓取和註入。一般通過數據綁定來實現,野蠻抓取註入數據。也可以改變每一個組件的狀態。只是在切換時就會暴露出問題。

2.2. dsl

ng-show,ng-hide,ng-class和ng-if作為模板的控制語句——全部這一切都讓人驚奇。

2.3. 依賴註入

2.4. 指令

3. 手動綁定數據spa方式以及與ajax dwr的集成

設置自己主動綁定數據為空列表

function listCtrl($scope) {

$scope.listO7 =[ ] ;

}

Click事件

function bindTableData(data)

{

$(‘#tabid1‘).scope().listO7 =data;

$(‘#formx‘).scope().$digest();

}

4. 格式化數據

須要建立一個模塊filter 比方常見的日期格式化

var homeModule = angular.module("atiMod", []);

homeModule.filter(‘timeFmtO7‘,function(){

return function(item){

try{

return item.Format("yyyy-MM-dd hh:mm:ss");

}catch(e){return "";}

}

});

使用filter。使用豎杠管道符號

{{itemO7.ds_id|‘timeFmtO7‘}}

作者:: 老哇的爪子 Attilax 艾龍, EMAIL:[email protected]

轉載請註明來源: http://blog.csdn.net/attilax

4.1. 多字段組合格式化

調用

{{itemO7.download_status+‘,‘+itemO7.startdownFlag+‘,‘+itemO7.trueDownFlag|statFmt}}

書寫過濾器

homeModule.filter(‘statFmt‘,function(){

return function(item){

//alert(item);

var arr=item.split(",");

var downedflag=arr[0];

var startdownFlag=arr[1];

var failFlag=arr[2];

if(downedflag==1 && failFlag==1)

return "已下載";

if( downedflag=="null" && startdownFlag==1 && failFlag=="null" )

return "下載中";

}

});

4.2. 輸出html

angularJs輸出html的時候,瀏覽器並不解析這些html標簽,不知道angularjs怎樣實現這樣的功能的。

可是這裏我們須要其顯示angular輸出的html能被瀏覽器解析怎麽辦呢?

通過api,發現通過指令 ng-bind-html來實現html的輸出。

<td ng-bind-html="itemO7.downloadStatus+‘,‘+itemO7.startdownFlag+‘,‘+itemO7.trueDownFlag+‘,‘+itemO7.dsId |statFmt" > </td>

還須要通過通過$sce服務來實現html的展示。

homeModule.filter(‘statFmt‘,[‘$sce‘, function($sce){

return function(item){

// alert(item);

var arr=item.split(",");

var downedflag=arr[0];

var startdownFlag=arr[1];

var failFlag=arr[2];

var dataid=arr[3];

if( failFlag==3 )

return $sce.trustAsHtml("下載失敗:<br>其它原因");

if( failFlag==4 )

return $sce.trustAsHtml( "下載失敗:<br>client空間滿");

}

}]);

5. 輸出作為函數參數調用

好像不能直接輸出。僅僅好借鑒輸出

<a href="javascript:void(0)" onclick="stop(this.id,this)" id="{{itemO7.dsId}}"> 終止</a>

6. 載入完畢事件

找了半天資料,沒有找到完畢事件的資料。

。僅僅好自己使用輪詢的方式來實現了。。原理是在foreach哈面一個tag 使用angular寫入。

檢測這個tag的狀態。假設能夠。說明已經載入完畢。。

<div id="finishTag" style="display:none">{{‘...‘}}</div>

if(txt.indexOf("{",0)>=0 ) //can find {{ brk,,,not finish

{

logx(" find {{ ");

}

好像是異步的。須要進一步明白

7. 常見錯誤

7.1. Atitit.angular.js FilterProvider filter [$injector:unpr]

"Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/$injector/unpr?p0=stateFmt1FilterProvider%20%3C-%20stateFmt1Filter\

新不上這個filter

原因:::預計瀏覽器緩存問題...

刷新..then ok

8. AngularJS適合之處

AngularJS通過為開發人員呈現一個更高層次的抽象來簡化應用的開發。如同其它的抽象技術一樣,這也會損 失一部分靈活性。換句話說。並非全部的應用都適合用AngularJS來做。AngularJS主要考慮的是構建CRUD應用。幸運的是。至少90%的 WEB應用都是CRUD應用。可是要了解什麽適合用AngularJS構建。就得了解什麽不適合用AngularJS構建。

如遊戲,圖形界面編輯器,這樣的DOM操作非常頻繁也非常復雜的應用,和CRUD應用就有非常大的不同,它們不適合用AngularJS來構建。像這樣的情況用一些更輕量、簡單的技術如jQuery可能會更好。

8.1. Angular vs jquery tmpl.js

格式化方面,tmpl更加方便。直接使用js函數就可以。

9. Angular的問題

9.1. 不利於開發人員進行調試,

經常輸出信息離題十萬八千裏

9.2. 學習進階難。

使用Angular須要學習大量的概念,包含但不限於:

· 模塊

· 控制器

· 指令

· 作用域

· 模板

· 鏈式函數

· 過濾器

· 依賴註入

10. 參考

Atitit.載入完畢事件的設計 angular.js

paip.提升效率--數據綁定到table原理和流程Angular js jquery實現 - attilax的專欄 - 博客頻道 - CSDN.NET

Atitit. js mvc 總結(2)----angular Knockout o99 最佳實踐 - attilax的專欄 - 博客頻道 - CSDN.NET

我由Angular轉向React,為什麽?-CSDN.NET

BootstrapJSAngularJS結合使用以及為什麽不用jQuery - OurJS

Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結