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?

Était-ce utile?

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 pour type mais ont type pour lang.language, ce qui entraîne dans les pas de correspondance dans la options 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top