2016-11-17 196 views
1

當我在select中使用ng-options循環列表並生成我的下拉列表時,是否可以將動態屬性id添加到option?它工作,如果我使用ng-repeat循環,因爲我可以將attribut id直接放在option標籤中,並用$index遞增。這也可能與ng-options?這裏是我的代碼:在ng選項中添加動態ID到選項

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.selectedOption1; 
 
    $scope.selectedOption2; 
 

 
    $scope.myList = [{ 
 
    text: "1" 
 
    }, { 
 
    text: "2" 
 
    }, { 
 
    text: "3" 
 
    }, { 
 
    text: "4" 
 
    }, { 
 
    text: "5" 
 
    }, ]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    <!--BUILD DROPDOWN WITH NG-OPTIONS LOOP--> 
 
    <select ng-model="selectedOption" ng-options="option as option.text for option in myList"></select> 
 

 
    <!--BUILD DROPDOWN AND SET ATTRIBUT ID WITH NG-REPEAT LOOP--> 
 
    <select ng-model="selectedOption2"> 
 
    <option id="option_{{$index}}" ng-repeat="option in myList">{{option.text}}</option> 
 
    </select> 
 
</div>

兩個select的截圖(紅色邊框的ID用):

enter image description here

任何想法?謝謝。

+2

對於'ng-options',你只能設置'option'的'text'和'value'而不是'id'。 – Aruna

+0

@Aruna好吧我期待這樣的答案 - 謝謝。 :-) – MrBuggy

+0

@Aruna如何修改ng選項循環中的值?目前,每個選項的值爲0-5(請參見屏幕截圖)。我可以在那裏設置一個文本,並像ng-repeat一樣用$ index增加它?謝謝 – MrBuggy

回答

2

可以使用track by選項:

<select ng-model="selectedOption" ng-options="obj.text for obj in myList track by obj.value"> 

但是,你必須修改你的對象一點點:

$scope.myList = [{ 
    text: "1", 
    value: "option_1" 
}, { 
    text: "2", 
    value: "option_2" 
}, { 
    text: "3", 
    value: "option_3" 
}, { 
    text: "4", 
    value: "option_4" 
}, { 
    text: "5", 
    value: "option_5" 
}, ]; 

這應該做訣竅。

編輯The plunker to test it

EDIT 2對於那些誰想要一個快速的答案,你也可以這樣做:

<select ng-model="selectedOption" ng-options="obj.text for obj in myList track by option + obj.text"> 

而且在js文件中加入:

$scope.option = 'option_'; 
$scope.myList = [{ 
    text: "1" 
}, { 
    text: "2" 
}, { 
    text: "3" 
}, { 
    text: "4" 
}, { 
    text: "5" 
}, ]; 
+0

你能製作一段代碼嗎?我試圖更新我的,但它打印我一些錯誤,我的下拉與ng選項循環是空的。 – MrBuggy

+0

真的老兄? ...看我的編輯。 – trichetriche

+0

我只是修改它以適應您的需求。看到第二個'選擇'並檢查它瞭解。如果你不這樣做,請在下面評論,我會做另一個編輯來解釋它。 – trichetriche

1

請看下面的答案。

Angular將總是呈現從0開始的index的值。不要擔心這一點。由於它將有內部參考,並會相應地更新模態。

我已在下面放置了一個span以查看所選項目的value

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.selectedOption1; 
 
    $scope.selectedOption2; 
 

 
    $scope.myList = [{ 
 
    text: "1" 
 
    }, { 
 
    text: "2" 
 
    }, { 
 
    text: "3" 
 
    }, { 
 
    text: "4" 
 
    }, { 
 
    text: "5" 
 
    }, ]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    <!--BUILD DROPDOWN WITH NG-OPTIONS LOOP--> 
 
    <select ng-model="selectedOption" ng-options="('option_' + (myList.indexOf(option) + 1)) as option.text for option in myList"></select> 
 
    <br/><br/> 
 
    Selected: <span><b>{{selectedOption}}</b></span> 
 

 
</div>

+0

嗨,謝謝你的回答。我確實需要的是,value屬性中的文本選項_ {{$ index}},因此它將是:value =「option_1」等等。我需要一些編碼的UI測試。這是否可以修改attribut值中的字符串?目前它仍然是0到4自動..? – MrBuggy

0

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.selectedOption1; 
 
    $scope.selectedOption2; 
 

 
    $scope.myList = [{ 
 
    text: "1" 
 
    }, { 
 
    text: "2" 
 
    }, { 
 
    text: "3" 
 
    }, { 
 
    text: "4" 
 
    }, { 
 
    text: "5" 
 
    }, ]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    
 
<select ng-model="selectedOption2"> 
 
<option ng-repeat="d in myList track by $index" ng-value="'Option_'+($index+1)"> 
 
    {{d.text}} 
 
</option> 
 
    
 
</select> 
 
    {{selectedOption2}} 
 
</div>

+0

如果你再次讀到我的問題,我已經有了ng-repeat的解決方案,但是如果可能的話,我需要和ng-options一樣的東西......所以這不是我真正需要的答案。 – MrBuggy