【问题标题】:Angularjs ng-options selected value of dropdownlistAngularjs ng-options 下拉列表的选定值
【发布时间】:2016-04-28 05:00:49
【问题描述】:

我使用自定义指令在下拉列表中显示年份。这是指令的模板。

template: '<select class="form-control" ng-model="joining.Year" ng-options="year for year in Years"></select>'

HTML就是这样

<div years-dropdown range="50"></div>

Years 是一个字符串数组。Year 字段在我的服务器端模型上是字符串类型。所选值正确存储在数据库中,但是当我重新加载页面(从数据库中获取模型)时,我得到了正确的值我的控制器,但值未显示为在下拉列表中选择。

编辑 还有一件事,当我更改下拉列表的选择并检查 html 时,它仍将默认值显示为已选择(第一个选项具有已选择属性)。但是我的范围对象已正确更新。

【问题讨论】:

  • 何时/何地/如何将年份设置为scope.joining.Year
  • 在页面加载时,我从数据库中获取加入对象并将其分配给 $scope.joining。加入对象有一个属性 Year .response.then(function (data) { $scope.joining= data; })
  • 您可以尝试将选项更改为ng-options="year as year for year in Years"
  • @Alon Eitan 我试过了,但没有任何区别。

标签: javascript angularjs


【解决方案1】:

问题是$scope.joining.YearYears[$index] 不是同一个对象引用。我不相信ngOptions 指令使用等价逻辑。所以这是手动进行的修复(将其放入您的 .then() 函数中:

for(var i = 0; i < $scope.Years.length; ++i) {
    if(angular.equals($scope.Years[i], $scope.joining.Year) {
        //the fix to get years[i] if it's equal to joining.Year
        $scope.Years[i] = $scope.joining.Year;
    }
}

//finally, apply data into joining
angular.extend($scope.joining, data);

【讨论】:

  • KKKKKKKK 我试过你的答案,虽然它没有用,但我开始考虑两个对象的相等性,在调试你建议的解决方案时,我突然想到 $scope.Years 是一个整数数组,我的Year 对象是一个数组。我的错误是不提供填充年份数组的代码部分。我不知道将答案标记为正确的确切规则,但您的答案正确识别了问题并引导我朝着正确的方向前进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多