2014-01-30 58 views
1

我正在和AngularJS合作,而且我非常新。AngularJS ng-repeat默认值不起作用

我的目标是用数据源中的OPTION元素填充SELECT标签。 这是我做的基本上是:

<script> 

    function LocalizationController($scope, $http) { 
     $scope.Regions = [ 
      { ID: "001", DESC: "DESC_1" }, 
       { ID: "002", DESC: "DESC_2" }, 
       { ID: "003", DESC: "DESC_3" }, 
        { ID: "004", DESC: "DESC_4" }, 
     ]; 

     $scope.Region = "003"; 
     $scope.init = function() { 
      $scope.Region = "003"; 
     } 
    } 
</script> 


<div ng-controller="LocalizationController" ng-init="init();"> 
    <input type="button" ng-click="Region='002'" value="test"> 
    <select id="region" name="RegionCode" ng-model="Region"> 
     <option ng-repeat="item in Regions" value="{{item.ID}}">{{item.DESC}}</option> 
    </select> 
</div> 

一切工作良好,选择是填补了我的项目, 但我想设置默认值。我设置我的对象模型是ng-model =“Region” - 我通过$ scope.Region =“003”将它的默认值设置到init()函数中。 当SELECT加载我不为什么,但dafault价值是第一位的“001”

我也试图通过 在这种情况下,SELECT得到正确的价值选择手动更改值。

任何人都可以解释为什么它不起作用?

我知道这是一个共同的问题,我已经看了那个, 任何解决方案建议使用NG-OPTION,该指令做工不错, 它可以填补我的选择与我的对象的数组,它可以选择默认值, 非常好,但它并没有解决我的问题,因为值到 选项元素id一个整数自动增量这不是我想要的。

在总结

这样:

NG-REPEAT可以使SELECT我怎么想,但默认值不起作用 NG-OPTIONS可以使SELECT我怎么想,默认值的作品,但价值为选项 项目不能设置我想要的。

有什么建议吗?

在此先感谢


编辑


我发现了一个 “解决方案”

<div ng-controller="LocalizationController" EXCLUDE-ng-init="init();"> 
    <select id="region" onload="alert();angular.element(this).scope().Region='002'" name="RegionCode" ng-model="Region"> 
     <option ng-repeat="item in Regions" value="{{item.ID}}">{{item.DESC}}</option> 
     {{init();}} 
    </select> 
</div> 

我不喜欢那么多,但工作得很好: - NG- INIT = “INIT();”不起作用 - 如果我们排除初始化为ng-init的默认值,EXCLUDE-ng-init =“init();”并把它设置为初始化时,它可以工作

看看代码吹,我把{{init();}}后ng-repeat。 Everithing做工不错 {{item.DESC}} {{的init();}}

我不认为这是最好的解决办法,但作品, 1)我有我的元素 2的droopdown填充)我的清单中选项的价值是正确的,“001”,“002”,而不是一个愚蠢的自动增量值,这是无用的。

我希望能帮助别人...... 感谢大家试图帮助ME


+0

为什么不用'ng-options'和'track by'表达式? –

+1

使用NG-OPTIONS的主要问题是进入服务器端代码, 我不会得到我想要的正确值。 我们如何知道由ng-option加载的select标签的值是一个自动增量整数......并且这没有用.. 我的值是字母数字值,无论如何,我可能需要一个不是自动的值增量..所以NG-OPTIONS是不是一个好solusion NG-REPEAT是最灵活的解决方案,但我不知道为什么默认 值不能设置成NG-的init()函数: - \ 再次感谢 –

回答

2

只需使用ng选项

<select id="region" name="RegionCode" ng-model="Region" ng-options="option.ID as option.DESC for option in Regions"> 

,做

$scope.init = function() { 
    $scope.Region = $scope.Regions[2]; 
} 

当您在使用ng-options的选项的值会像0,1,2,3检查选择框..,这是自动递增整数如你所说。但别担心。它的价值仅仅是为了展示在那里,但是一旦你发布了你的表单,你将获得正确的价值,你的情况是ID

+0

我刚刚试过w帽子你说, 在服务器端代码它仍然是自动增加值, 只是为了增加信息的价值。 - 我已经阿贾克斯试图与$(“#myForm会”)提交序列化() - 我已经试过CLASIC html提交 没有什么改变值到服务器它是autoincrfemental值.. –

+0

为什么你使用ajax提交如果角有一个方法来处理表单提交? – BKM

+0

我工作的页面已经使用JQuery构建, 本页的一部分有三个下拉选择选项, NATION,REGION CITY 因为我想介绍AngularJS来改进项目 我认为很好让一个控制器在哪里管理国家,地区和城市,也因为这三个下垂被放置在超过 的一页。 然后我不能更改表单子因为完成和测试 你认为ajax jquery子命令可能会使问题得到真正的选项价值吗? –

0

使用NG选项

在这种情况下,如果你有对象(不是单值)发挥它应该是这样

$scope.init = function() { 
    $scope.Region = $scope.Regions[2]; 
} 
+0

感谢你的答案,但我怎么说更多的一次, ng选项不是一个完全解决方案.. 它使自动增量值是没用的.. 无论如何感谢您的兴趣... –