2014-07-06 48 views
4

我有兩個相同的模型,一個內部手風琴和另一個外部下拉。 外部下拉菜單在雙向數據綁定方面效果很好,但手風琴內部的下拉菜單似乎只有單向綁定,換言之,在UI中選擇不會設置模型值。我發現一個建議here使用ng-change將解決這個問題。它固定爲<textarea>,但不適用於<select>。 想知道這可能是angular-ui中的錯誤。有人可以幫助解決這個問題。提前致謝!angular-bootstrap手風琴數據綁定問題

外手風琴

<div class="form-group"> 
       <label class="col-md-2 control-label" for="category">Category</label> 
       <div class="col-md-3"> 
       <select id="category" ng-model="category" name="category" type="text" class="form-control"> 
        <option ng-repeat="category in config.categories.sort()" value="{{category}}"> 
        {{category}}</option> 
       </select> 
       </div> 
      </div> 

內部手風琴

<accordion close-others="false"> 
    <accordion-group> 
<div class="form-group"> 
       <label class="col-md-2 control-label" for="category">Category</label> 
       <div class="col-md-3"> 
       <select id="category" ng-model="category" ng-change="setCategory(category)" name="category" type="text" class="form-control"> 
        <option ng-repeat="category in config.categories.sort()" value="{{category}}"> 
        {{category}}</option> 
       </select> 
       </div> 
      </div> 
    </accordion-group> 
    </accordion> 

我的模型categories是字符串的數組:

例如:

"categories": [ 
      "Admin API", 
      "Admin License", 
      "adminGUI", 
      "antennahouse", 
      "App Builder", 
      "Backup/Restore", 
      "Basis"] 

NG變函數

$scope.setCategory = function(category) { 
    $scope.category = category; 
}; 

回答

5

綁定到直接範圍的屬性幾乎是一個壞主意,因爲許多指令定義自己的範圍,如果你的小部件(選擇框)裏面這樣一個指令,實際上你將綁定到子作用域的屬性,而不是綁定到控制器作用域的屬性。

因此,經驗法則是:在你的ng模型中總是有一個點。表單控件應該修改你的作用域的對象,而不是直接修改你的作用域。

在你的控制器:

$scope.selection = {}; 

在你看來:

<select ng-model="selection.category" ...> 

另外請注意,您在使用相同的ID,以確定兩個選擇框。這會讓你的DOM無效。一個ID唯一標識一個元素。

+0

感謝您的反饋@JB。我只使用這兩個doms來舉例說明。我只用手風琴裏面的那個。爲了解釋這個問題,我展示了兩個例子。也許回想起來,我應該清楚這一點。是的,你是對的。我設置了'$ scope.category = null'而不是'{}'。再次感謝! – Sudhakar