如何解析对象

时间:2014-10-14 01:03:13

标签: json angularjs

我有一个包含JobTypeId,JobClassId,GeoAreaId的Job对象。我可以成功地将一个id发送回apiController但是当我尝试解析所有3个时我得到一个错误:

  

Object.parse(native)上的意外标记

角度控制器

 $scope.updateJob = function (job) {
    console.log($scope.currentItem);
    var jt = JSON.parse($scope.currentItem.JobType)
    var jc = JSON.parse($scope.currentItem.JobClass)
    var ga = JSON.parse($scope.currentItem.GeoArea)
    job.JobTypeId = jt.JobTypeId;
    job.JobClassId = jc.JobClassId;
    job.GeoAreaId = ga.GeoAreaId;
    jobFactory.updateJob(job).success(successCallback)
        .error(errorCallback);
    console.log(job); 
};
var successCallback = function (data, status, headers, config) {
    notificationFactory.success();
};
var errorCallback = function (job, status, headers, config) {
    notificationFactory.error(job.ExceptionMessage);
};

查看

 <select ng-controller="JobMiscCtrl" style="width:148px" ng-model="currentItem.JobType">
   <option ng-repeat="job in jobTypeArray" title="{{job.JobTypeName}}" ng-selected=" {{job.JobTypeId == currentItem.JobTypeId}}" value="{{job}}">
     {{job.JobTypeName}}
   </option>
 </select>
 <select ng-controller="JobMiscCtrl" style="width:148px" ng-model="currentItem.JobClass">
    <option ng-repeat="job in jobClassArray" title="{{job.JobClassName}}" ng-selected="{{job.JobClassId == currentItem.JobClassId}}" value="{{job}}">
    {{job.JobClassName}}
    </option>
 </select>
 <select ng-controller="JobMiscCtrl" style="width:148px" ng-model="currentItem.GeoArea">
   <option ng-repeat="job in geoAreaArray" title="{{job.GeoAreaName}}" ng-selected="{{job.GeoAreaId == currentItem.GeoAreaId}}" value="{{job}}">
       {{job.GeoAreaName}}
   </option>
 </select>

 <input ng-controller="JobCtrl" style="margin-right: 20px; width: 70px; margin-top: 25px" type="submit" ng-click="updateJob(currentItem)" value="Submit" />

更新 我把所有东西都搬进了1个控制视图返回一个字符串。 apiController只需要JobTypeId。这就是我试图从字符串中解析Id属性的原因。这就是我在看的东西

{{currentItem.GeoArea.GeoAreaId}}
   <label style="margin-left:57px">Geo&nbsp;Area:</label>
   <select style="width:148px" ng-model="currentItem.GeoArea.GeoAreaId">
    <option ng-repeat="job in geoAreaArray" title="{{job.GeoAreaName}}" ng-selected="{{job.GeoAreaId == currentItem.GeoAreaId}}" value="{{job}}">
     {{job.GeoAreaName}}
    </option>
   </select>

当我选择一个新的GeoArea时,你会看到currentItem.GeoArea.GeoAreaId中显示的内容 pic

1 个答案:

答案 0 :(得分:3)

您不必专门在对象上调用JSON.Parse。它已经是您需要的格式。你可以这样做。

$scope.updateJob = function (job) {
    console.log($scope.currentItem);

    var jt = $scope.currentItem.JobType;
    var jc = $scope.currentItem.JobClass;
    var ga = $scope.currentItem.GeoArea;

    job.JobTypeId = jt.JobTypeId;
    job.JobClassId = jc.JobClassId;
    job.GeoAreaId = ga.GeoAreaId;
    jobFactory.updateJob(job).success(successCallback)
        .error(errorCallback);
    console.log(job); 
};

甚至更短

$scope.updateJob = function (job) {
    console.log($scope.currentItem);
    job.JobTypeId = $scope.currentItem.JobType.JobTypeId;
    job.JobClassId = $scope.currentItem.JobClass.JobClassId;
    job.GeoAreaId = $scope.currentItem.GeoArea.GeoAreaId;
    jobFactory.updateJob(job).success(successCallback)
        .error(errorCallback);
    console.log(job); 
};

更新您的用户界面以简化

<div ng-controller="JobMiscCtrl">        
   <select ng-model="currentItem.JobType" ng-options="job.JobTypeName for job in jobTypeArray"></select>
   <br/>
   <select ng-model="currentItem.JobClass" ng-options="job.JobClassName for job in jobClassArray"></select>
   <br/>
   <select ng-model="currentItem.GeoArea" ng-options="job.GeoAreaName for job in geoAreaArray"></select>
   <input style="margin-right: 20px; width: 70px; margin-top: 25px" type="submit" ng-click="updateJob(currentItem)" value="Submit" />
</div>