AngularJS int映射不起作用?

时间:2017-05-14 17:30:49

标签: javascript angularjs ajax

伙计我有一个跟随Ajax调用返回的模型。

public partial class GroupForm
{
    [Key]
    public virtual int Id { get; set; }
    public virtual int? GroupId { get; set; }
    public virtual int? FormId { get; set; }
    public virtual int? Frequency { get; set; }     
}

在有角度的Ajax调用中,我得到了一个GroupForm列表然后使用ng-repeat来显示FormID和Frequency,但是显示了Frequency int值,我想显示字符串,所以我做了映射,但它只显示GroupId,频率未显示。 我的控制器部分如下:

FrequencyMap = {
        1: "Annual",
        2: "Monthly",
        3: "Half Year"
    }

    $scope.mapFrequency = function (col) {
        return FrequencyMap[col];
    };

我的前面的角色代码如下:

<ul>
                <li ng-repeat="w in GroupForm">
                    {{ w.FormId+ ', '+mapFrequency(w.Frequency)}}
                </li>
            </ul>

我正在使用此代码,ajax调用返回三个GroupForm记录,它只显示3个GroupId,但频率字符串丢失。但是,如果我使用w.Frequency,它可以显示int vale。 请建议

我如何获得GroupForm:

 $scope.GetAllGroupForms = function (Id) {
        var url = '/GroupForm/Details/' +Id;
        $scope.loading = true;
        DataSvc.getAjaxData(url)
         .then(function (data) {
             //success        
             $scope.GroupForm = data.data;
             $scope.loading = false;
         }, function (httpStatus) {
             //failed
             $scope.hasErrors = true;
             if (httpStatus === 404) {
                 $scope.errorMessage = "Couldn't retrieve Users Info";
             } else {
                 $scope.errorMessage = 'The system could not process your request, please try again or contact the system administrator.';
             }
             $log.warn(httpStatus);
             $scope.loading = false;
         });
    };

1 个答案:

答案 0 :(得分:0)

将逻辑抽象到您的范围内。如果这对您不起作用,那么您的数据有问题,或者您设置GroupForm的方式

angular
  .module('demo', [])
  .controller('demoController', controller);
  
function controller($scope) {

  var frequencyMap = {
    1: "Annual",
    2: "Monthly",
    3: "Half Year"
  };
  
  $scope.GroupForm = [
    {
      FormId: 123,
      Frequency: 3
    },
    {
      FormId: 456,
      Frequency: 1
    },
    {
      FormId: 789,
      Frequency: 2
    }
  ];


  function getFrequency (frequencyId) {
    return frequencyMap[frequencyId];
  }

  $scope.formatGroupFormItem = function(groupForm) {
    var frequency = getFrequency(groupForm.Frequency);

    var result = groupForm.FormId;
    if(frequency) {
      result += ', ' + frequency;
    }

    return  result;
  };
}
<head><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script></head>
<body ng-app="demo" ng-controller="demoController">
  <ul>
    <li ng-repeat="form in GroupForm">
        {{ formatGroupFormItem(form) }}
    </li>
  </ul>
</body>