2015-05-16 25 views
1

所以,我很堅持這個:AngularJS - 通過模型管理按鈕或輸入可用性

我有我的網頁上相當多的按鈕,每個按鈕的可用性是在不同的語境不同,例如:

當按下「添加」按鈕時,其狀態將被禁用,取消和保存按鈕將可用。

我想出了一個解決方案來管理一個對象通話狀態每按鈕的階段,就像這樣:

//這是控制器

$scope.some_id = false; 
// With some UI interaction, $scope.some_id will be some integer value 

$scope.getContextBtnAdd = function(){ return $scope.some_id; }; 
$scope.getContextBtnCancel = function(){ return !$scope.getContextBtnAdd(); }; 

$scope.state = { 
    contextBtns : { 
     btnAdd : $scope.getContextBtnAdd(), 
     btnCancel: $scope.getContextBtnCancel(), 
    }, 

    footerBtns : { Some footer buttons } 
}; 

//這是查看

<button name="add" ng-disabled="!state.contextBtns.btnAdd">Add</button> 

「因此,當沒有產品負載時,$ scope.some_id將爲false,因此Add按鈕將可用,但是當用戶單擊某些產品時,$ scope.some_id將是某個整數值比如4,7或100 ......並且該按鈕將被禁用。 「< ===這就是我想要的,但實際上這是行不通的,在SOME_ID變化,但也許是的getContext功能是從來沒有所謂的現在,我必須通過的getContext函數像這樣NG-禁用:。

<button name="add" ng-disabled="!getContextBtnAdd()">Add</button> 

但我想通過一個對象來管理它們。所以,有什麼是我的代碼的問題,有沒有更好的方式來管理按鈕,輸入....小號可用性?

謝謝!

回答

1

當該行被執行:

$scope.state = { 
    contextBtns : { 
     btnAdd : $scope.getContextBtnAdd(), 
     btnCancel: $scope.getContextBtnCancel(), 
    }, 

    footerBtns : { Some footer buttons } 
}; 

創建狀態對象,並且其contextBtns.btnAdd屬性(例如)採用當時返回$scope.getContextBtnAdd()的值。屬性值之後不會更改。

你想要的是每次評估時總是有值$scope.getContextBtnAdd()。所以,你只需要簡單的功能本身:

$scope.state = { 
    contextBtns : { 
     btnAdd : $scope.getContextBtnAdd, 
     btnCancel: $scope.getContextBtnCancel, 
    }, 

    footerBtns : { Some footer buttons } 
}; 

,並在視圖:

<button name="add" ng-disabled="!state.contextBtns.btnAdd()">Add</button> 
+0

好極了,它就像一個魅力。非常感謝你。我想知道的另一件事是,如果這是管理這些按鈕或輸入狀態的正確方法? (因爲我會有很多按鈕和輸入字段) –

+0

如果它工作正常,並且如果你覺得它是最可讀的方式和可維護的方式,那麼它很好。 –