關於angular中函數的前後執行之我見(以及angular的小bug)

在js中,函數的前後執行html

(1)在angular中假設有這個場景,對錶單資料進行編輯,恰好這個表單有select選項須要從後臺中獲取,這個時候這個表單使用angular進行開發的時候的正確打開方式應該是promise

先加載select選項,在加載表單的對應內容(因爲http是異步的,並非單純的把js順序調整一下就能夠的)app

這時候能夠使用angular自帶的$q返回promise來控制函數運行,異步

若是函數中沒有其餘的異步,簡單粗暴的使用$timeout來控制函數

(2)input【type=hidden】使用ng-model沒法賦值中這個bug,能夠套個div把東西隱藏 type設爲別的值,後者任何隱藏他的方法。spa

(3)在查閱資料的時候發現了你們另外一種的判斷list加載到最後一條的方案code

angular中判斷 ng-repeat是否迭代完畢。htm

by:古德God http://www.cnblogs.com/wangmeijian/p/5141266.html blog

//方法一事件

$scope.data = [
    {
        str: 'a'
    },
    {
        str: 'b'
    },
    {
        str: 'c'
    }
]
//自定義指令repeatFinish   
app.directive('repeatFinish',function(){
    return {
        link: function(scope,element,attr){
            console.log(scope.$index)
            if(scope.$last == true){
                console.log('ng-repeat執行完畢')
            }
        }
    }
})
<div id="box">
    <span ng-repeat="item in data" repeat-finish>{{item.str}}</span>  //小駝峯,repeatFinish ,用 -  隔開,repeat-finish  
</div>
<div id="box">
    <span ng-repeat="item in data" repeat-finish="renderFinish()">{{item.str}}</span>
</div>
再經過指令的attr參數獲取這個處理函數

複製代碼
app.directive('repeatFinish',function(){
    return {
        link: function(scope,element,attr){
            console.log(scope.$index)
            if(scope.$last == true){
                console.log('ng-repeat執行完畢')
                scope.$eval( attr.repeatFinish )
            }
        }
    }
})
//controller裏對應的處理函數
$scope.renderFinish = function(){
    console.log('渲染完以後的操做')
}
app.directive('repeatFinish',function(){
    return {
        link: function(scope,element,attr){
            console.log(scope.$index)
            if(scope.$last == true){
                console.log('ng-repeat執行完畢')
                //向父控制器傳遞事件
                scope.$emit('to-parent');
                //向子控制器傳遞事件
                scope.$broadcast('to-child');
            }
        }
    }
})
//父控制器中監聽事件
$scope.$on('to-parent',function(){
    //父控制器執行操做
})

//子控制器中監聽事件
$scope.$on('to-child',function(){
    //子控制器執行操做
})
複製代碼
相關文章
相關標籤/搜索