我有一个包含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 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中显示的内容
答案 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>