2014-02-25 33 views
6

我有一个ngSelect在它的一些选项。设置默认值内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. 

请帮忙吗?

+0

将$ scope.type更改为$ scope.tVal。 –

回答

9

尝试这种方式

<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];** 
}]) 
+0

我试过这种方式: 给出完全相同的输出。仍然没有默认值。您的选项值未定义。 – petur

+0

谢谢!像魅力一样工作,

+1

你不需要选项标签,完全可以看到我的答案。快乐编码花花公子:) –

3

工作例如: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.i18ntype但被设置typelang.language,从而导致在option的名单不匹配。
2

我没有足够的信誉发表评论,所以我会离开它作为一个答案。

的拉梅什拉金德伦答案是对的,但你尝试使用不同的ngOptions语法。 如果使用label for value in array语法,则必须将模型属性绑定到整个对象。 如果您在评论中使用语法,即select as label for value in array,则必须将模型绑定到select。

为了话,他的榜样的作品,并在评论你的榜样工作,你需要用$scope.selectedlanguage = $scope.languages[0].i18n;

更换$scope.selectedlanguage = $scope.languages[0];检查select directive documentation进一步的信息

0

这为我工作:

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

现场示例:Plunker