【问题标题】:AngularJS Select Value Being Lost After Call to Restful Service and Scope Object UpdateAngularJS选择在调用Restful服务和范围对象更新后丢失的值
【发布时间】:2014-05-06 12:31:21
【问题描述】:

我有一个使用 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>

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

选择更改后,request.Package 项会正确更新为所选包。

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

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

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

saveRequest 方法如下所示:

$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 中的选择列表会重置回“无包”,而不是保留正确选择的包。

【问题讨论】:

    标签: javascript asp.net angularjs asp.net-web-api


    【解决方案1】:

    你有两个选择:

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

    【讨论】:

    • 好的 - 在这两个选项中,哪个被认为是最好的?我对 Angular 非常陌生,本周才开始编写它。对我来说,听起来选项 #1 可能是更好的做事方式 - 这是正确的吗?
    • @99823:我个人喜欢#1,因为我从来没有遇到过你的问题。使用 SPA 时,我只更新 what is changed 以提高性能。我不replace 整个对象。但我不能说这是最好的解决方案,每个人对什么是最好的都有不同的看法。只需使用最适合您的解决方案即可。
    • 谢谢,我现在要测试选项 1,看看选择是否正常 - 再次感谢
    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多