Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結javascript
1. 本文範圍 1html
2. Angular的優勢 1java
2.1. 雙向數據綁定 1jquery
2.2. dsl化 2angularjs
2.3. 依賴注入 2ajax
2.4. 指令 2json
3. 手動綁定數據spa方式以及與ajax 與dwr的集成 2api
4. 格式化數據 2瀏覽器
7.1. Atitit.angular.js FilterProvider filter [$injector:unpr] 5
8.1. Angular vs jquery tmpl.js 6
主要使用Angular綁定一個json列表到table。。
實現mvc html 模板功能。。
更加容易實現dsl
處理表單數據和編輯表格數據帶來了不少優勢
不過Jq的form序列化也是很簡單的
在Angular中,操縱數據不是經過抓取和注入。通常經過數據綁定來實現,野蠻抓取注入數據。也可以改變每一個組件的狀態,不過在切換時就會暴露出問題。
ng-show,ng-hide,ng-class和ng-if做爲模板的控制語句——全部這一切都讓人驚奇。
設置自動綁定數據爲空列表
function listCtrl($scope) {
$scope.listO7 =[ ] ;
}
Click事件
function bindTableData(data)
{
$('#tabid1').scope().listO7 =data;
$('#formx').scope().$digest();
}
須要創建一個模塊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:1466519819@qq.com
轉載請註明來源: http://blog.csdn.net/attilax
調用
{{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 "下載中";
}
});
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>客戶端空間滿");
}
}]);
好像不能直接輸出,只好借鑑輸出
<a href="javascript:void(0)" onclick="stop(this.id,this)" id="{{itemO7.dsId}}"> 終止</a>
找了半天資料,沒有找到完成事件的資料。。只好本身使用輪詢的方式來實現了。。原理是在foreach哈面一個tag 使用angular寫入。。檢測這個tag的狀態,若是能夠,說明已經加載完成。。。
<div id="finishTag" style="display:none">{{'...'}}</div>
if(txt.indexOf("{",0)>=0 ) //can find {{ brk,,,not finish
{
logx(" find {{ ");
}
好像是異步的,須要進一步明確
"Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/$injector/unpr?p0=stateFmt1FilterProvider%20%3C-%20stateFmt1Filter\
新不上這個filter
緣由:::估計瀏覽器緩存問題...
刷新..then ok
AngularJS經過爲開發者呈現一個更高層次的抽象來簡化應用的開發。如同其餘的抽象技術同樣,這也會損 失一部分靈活性。換句話說,並非全部的應用都適合用AngularJS來作。AngularJS主要考慮的是構建CRUD應用。幸運的是,至少90%的 WEB應用都是CRUD應用。可是要了解什麼適合用AngularJS構建,就得了解什麼不適合用AngularJS構建。
如遊戲,圖形界面編輯器,這種DOM操做很頻繁也很複雜的應用,和CRUD應用就有很大的不一樣,它們不適合用AngularJS來構建。像這種狀況用一些更輕量、簡單的技術如jQuery可能會更好。
格式化方面,tmpl更加方便,直接使用js函數便可。
經常輸出信息離題十萬八千里
使用Angular須要學習大量的概念,包括但不限於:
· 模塊
· 控制器
· 指令
· 做用域
· 模板
· 鏈式函數
· 過濾器
· 依賴注入
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
將BootstrapJS和AngularJS結合使用以及爲何不用jQuery - OurJS