Domanda

Ho un NGSELECT con alcune opzioni in esso.

<select data-ng-model="type" data-ng-change="option(type)">
   <option data-ng-repeat="type in languages" value="{{type.i18n}}">
        {{type.language}}
    </option>
</select>
.

e un controller

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" }
    ];
}])
.

Voglio che il ngSlect abbia un'opzione predefinita, nel mio caso: "Inglese".Ho provato a impostarlo su:

$scope.type = $scope.languages[0].language; // English
$scope.type = $scope.languages[0]; //The whole darn json object.
.

Aiuto per favore?

È stato utile?

Soluzione

Prova in questo modo

<select  ng-model="selectedlanguage" ng-change="option(this.selectedlanguage)"  ng-options="i.language for i in languages">
            </select>
.

// Codice 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];**
}])
.

Altri suggerimenti

Che ne dici di usare ngSelected? http://docs.angularjs.org/api/ng/directive/ngSelected

<option ng-selected="$index==0"></option>
.

o

<option ng-selected="type.language=='English'"></option>
.

Esempio di lavoro: http://plnkr.co/edit/yv8gew3idgxjh666umlc?p=previeweleth

<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;
}]);
.

Note:

    .
  • ha rimosso il servizio $translate per facilitare la riproduzione.
  • ha cambiato una callback ng-changed su un $watch sul $scope ma che è solo una scelta estetica.
  • Il cambiamento cruciale è stato che stavi scegliendo il lang.i18n per type ma stavano impostando type a lang.language, con conseguenti corrispondenze nell'elenco options.

Non ho abbastanza reputazione per commentare quindi lo lascerò come risposta.

La risposta Ramesh Rajendran ha ragione, ma hai provato a utilizzare una diversa sintassi ngOptions. Se si utilizza la sintassi label for value in array, è necessario collegare l'attributo del modello all'intero oggetto. Se si utilizza la sintassi nel tuo commento, che è select as label for value in array, è necessario associare il modello alla selezione.

In parole ordinate, il suo esempio funziona, e al tuo esempio sul commento al lavoro è necessario sostituire $scope.selectedlanguage = $scope.languages[0]; con $scope.selectedlanguage = $scope.languages[0].i18n;

Controllare il Seleziona Documentazione Direttiva per ulteriori informazioni

Questo ha funzionato per me:

$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>
.

Esempio dal vivo: plunker

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top