Вопрос

У меня есть ngSelect с некоторыми опциями.

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

И контроллер

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

Я хочу, чтобы у ngSelect была опция по умолчанию, в моем случае:"Английский".Я попытался установить его:

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

Помоги пожалуйста?

Это было полезно?

Решение

Попробуйте так

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

// код 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];**
}])
.

Другие советы

Как насчет использования ngSelected? http://docs.angularjs.org/api/ng/diruction/ngselected

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

или

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

Рабочий пример: 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;
}]);

Примечания:

  • Удалили $translate сервис для удобства размножения.
  • Изменили ng-changed обратный вызов на $watch на $scope но это всего лишь эстетический выбор.
  • Решающее изменение заключалось в том, что вы выбирали lang.i18n для type но устанавливали type к lang.language, что приводит к отсутствию совпадений в optionсписок.

У меня нет достаточно репутации, чтобы комментировать, поэтому я оставлю это как ответ.

Ответ Ramesh Rajendran прав, но вы пытались использовать разные синтаксис ngOptions. Если вы используете синтаксис label for value in array, вы должны связать атрибут модели для всего объекта. Если вы используете синтаксис в своем комментарии, который является select as label for value in array, то вы должны связать модель к выбору.

В целях заказа его пример работает, и к вашему примеру на комментарии к работе вам нужно заменить $scope.selectedlanguage = $scope.languages[0]; с $scope.selectedlanguage = $scope.languages[0].i18n;

Проверить Выберите документацию директивы для получения дополнительной информации

Это работало для меня:

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

Живой пример: polecker

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top