Définir la valeur par défaut à l'intérieur de ngSelect
-
21-12-2019 - |
Question
J'ai un un ngSelect avec quelques options.
<select data-ng-model="type" data-ng-change="option(type)">
<option data-ng-repeat="type in languages" value="{{type.i18n}}">
{{type.language}}
</option>
</select>
Et un Contrôleur
angular.module('navigation', [])
.controller('NavCtrl',['$scope','$translate', function($scope,$translate){
$scope.option = function(type){
console.log(type) //this display the i18n value of languages
$translate.use(type);
}
$scope.languages = [
{ language: "English", i18n: "en_EN"},
{ language: "Swedish", i18n : "se_SE" }
];
}])
Je veux le ngSelect d'avoir une option par défaut, dans mon cas:"À l'anglaise".J'ai essayé de la mettre à l':
$scope.type = $scope.languages[0].language; // English
$scope.type = $scope.languages[0]; //The whole darn json object.
De l'aide s'il vous plaît?
La solution
Essayez de cette façon
<select ng-model="selectedlanguage" ng-change="option(this.selectedlanguage)" ng-options="i.language for i in languages">
</select>
// code JS
angular.module('navigation', [])
.controller('NavCtrl',['$scope','$translate', function($scope,$translate){
$scope.option = function(type){
console.log(type) //this display the i18n value of languages
$translate.use(type);
}
$scope.languages = [
{ language: "English", i18n: "en_EN"},
{ language: "Swedish", i18n : "se_SE" }
];
**$scope.selectedlanguage = $scope.languages[0];**
}])
Autres conseils
comment sur l'utilisation de ngSelected
? http://docs.angularjs.org/api/ng/directive/ngSelected
<option ng-selected="$index==0"></option>
ou
<option ng-selected="type.language=='English'"></option>
Exemple: http://plnkr.co/edit/yv8gew3IDGxjH666UmlC?p=preview
<select data-ng-model="selectedType">
<option data-ng-repeat="lang in languages" value="{{lang.i18n}}">
{{lang.language}}
</option>
</select>
JS:
.controller('NavCtrl',['$scope', function($scope){
$scope.$watch('selectedType', function(type){
if (!type) return;
console.log(type) //this display the i18n value of languages
// $translate.use(type);
});
$scope.languages = [
{ language: "English", i18n: "en_EN"},
{ language: "Swedish", i18n : "se_SE" }
];
$scope.selectedType = $scope.languages[0].i18n;
}]);
Notes:
- Avez supprimé le
$translate
service pour en faciliter la reproduction. - Ont changé une
ng-changed
rappel d'un$watch
sur le$scope
mais c'est simple choix esthétique. - Un changement crucial est que vous avez été le choix de la
lang.i18n
pourtype
mais onttype
pourlang.language
, ce qui entraîne dans les pas de correspondance dans laoption
s de la liste.
Je n'ai pas assez de réputation pour commentaire, donc je vais laisser ça comme réponse.
Le Ramesh Rajendran réponse est juste, mais vous essayé d'utiliser un autre ngOptions
la syntaxe.Si vous utilisez le label for value in array
la syntaxe, alors vous devez lier l'attribut de modèle à l'ensemble de l'objet.Si vous utilisez la syntaxe de votre commentaire, ce qui est select as label for value in array
ensuite, vous devez lier le modèle pour le sélectionner.
En d'autres termes, son exemple fonctionne, et votre exemple sur le commentaire pour le travail, vous devez le remplacer $scope.selectedlanguage = $scope.languages[0];
avec $scope.selectedlanguage = $scope.languages[0].i18n;
De vérifier la sélectionnez la directive de la documentation pour de plus amples informations
Cela a fonctionné pour moi:
$scope.prop = { "values":
[ {name:'hello1',id:1},{name:'hello2',id:2},{name:'hello3',id:3}] };
$scope.selectedValue = 2;
<select ng-model="selectedValue" ng-options="v.id as v.name for v in prop.values">
<option selected value="">Select option</option>
</select>
Exemple en direct: Plunker