AngularJS在调用rest式服务和作用域对象更新后选择值丢失

AngularJS Select Value Being Lost After Call to Restful Service and Scope Object Update

本文关键字:更新 选择 对象 作用域 调用 rest 服务 AngularJS      更新时间:2023-09-26

我有一个使用ASP.net Web API后端的angularjs前端。我使用下面的代码为我的选择列表:

<select id="package" class="form-control" ng-options="package as package.Name for package in request.PackageServices.Packages" ng-model="request.Package">
    <option value="">No Package</option>
</select>

选择列表正确填充,并按预期输出包。

在选择更改时,请求。包项使用选择的包正确更新。

在将请求对象发布到Web API restful服务时,它正确地包含了正确的包。

web api向客户端发送restful响应时,请求对象包含正确的包。

问题在于,在调用API服务并且API服务响应返回新的请求对象之后,选择列表失去了正确的选择值。

下面是saverrequest方法的样子:

$scope.saveRequest = function (request) {
        console.log(request);
        //the request.Package contains the correct Package here!    
        applicantLinkData.create(request)
        .$promise.then(
            function (resp) {
                $scope.request = resp.Request;
                console.log(resp.Request);
                // the resp.Request.Package contains the right package here!
            },
            function (resp) {
                //failure... do something
            }
        );
   };

我不知道如何解决这个问题,但基本上在saveRequest方法被调用后,html中的选择列表重置回"no Package",而不是保留正确选择的包。

你有两个选择:

  • 不要替换整个请求,这会导致angular失去对对象引用的跟踪。您需要一个字段一个字段地复制。
  • 给你的包分配一个Id,并在你的ng-options中使用通过Id跟踪,而不是通过对象引用跟踪。ng-options="package as package.Name for package in request.PackageServices.Packages track by package.Id"