2

我正在努力将枚举类绑定到 SELECT 语句。

给定 TypeScript 定义:

enum SearchCriteria {
  expensive = 0,
  cheap = 1,
  interesting = 2,
  newest = 3
}

和用法:

<div id="searchResultSort">
            {{'sort' | translate}}:
            <select 
                    ng-model=" options.selectedCriteria">
                <option value="0"> {{'sortByExpensive' | translate}}</option>
                <option value="1"> {{'sortByCheap' | translate}}</option>
                <option value="2"> {{'sortByInteresting' | translate}}</option>
                <option value="3"> {{'sortByNewest' | translate}}</option>
            </select>
        </div>

现在这段代码有几个问题:

1) 枚举值是硬编码的

2)默认值功能不起作用 - 我将此错误跟踪到 angularjs 处理这种情况的方式。它使用比较 === 因此“0”!== 0。 初始 ng-model 值未在选择中设置

我不介意通过在具有两个属性的控制器中创建新数组来解决这个问题:{translatedVal, enumId}。

问题是,我如何让这个“translatedVal”与真正的翻译保持同步?

sortingOptions: [
    {
        val: SuperSearch.Repository.Model.SearchCriteria.cheap,
        translation: bindAndInterpolateLanguage('languageKey')
    },

使用角度平移。

4

2 回答 2

1

这是我发现的最好的,并且仍在我的项目中用于将值绑定到选择组件。在这里,我有一个部门列表。

<select data-ng-model="selectedDepartment"   
data-ng-options="dept.DepartmentId as dept.Title for dept in departments"   
data-ng-change="onDepartmentChange()" />  

您可以随时访问和操作“selectedDepartment”的值。

希望它能提供一些想法来解决您面临的问题。

于 2014-02-25T09:54:59.210 回答
0

如果您手动声明值,请尝试这种方式

  <select class="form-control input-lg" ng-model="selectedSearchCriteria" ng-change="changeTenant(this.selectedSearchCriteria)" required ng-options="i.ToString() for i in SearchCriteria"></select> 

var SearchCriteria=[{
          "expensive":0},
          {"cheap" : 1},
          {"interesting" : 2},
          {"newest" : 3}]        
         $scope.selectedSearchCriteria = SearchCriteria[0];

如果您使用 ajax 调用从服务器端获取值,请尝试以下方式

 <select class="form-control input-lg" ng-model="selectedSearchCriteria" ng-change="changeTenant(this.selectedSearchCriteria)" required ng-options="i.ToString() for i in SearchCriteria"></select> 

             $http.get(URL)
               .success(function (response) {
                   $scope.SearchCriteria= response;
                   $scope.selectedSearchCriteria = response[0];
                   $scope.$apply();
               });
于 2014-02-26T08:25:16.810 回答