2014-03-27 60 views
1

我有一個使用ASP.net Web API後端的angularjs前端。我在我的選擇列表中使用以下代碼:AngularJS在調用Restful Service和Scope對象更新後選擇值丟失

<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寧靜服務後,它正確包含正確的包。

在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重置回「不包「而不是保留正確選擇的軟件包。

回答

1

你有2種選擇:

  • 不要更換整個請求,導致角失去跟蹤對象引用的。您需要逐場複製。
  • 指定一個Id到您的包中,並使用跟蹤Id在您的ng-options中,而不是通過對象引用進行跟蹤。 ng-options="package as package.Name for package in request.PackageServices.Packages track by package.Id"
+0

好的 - 這兩個選項哪個最好?我對角度非常陌生,剛開始本週編碼。對我而言,聽起來像#1選項可能是更好的方式來做事 - 這是正確的嗎? – 99823

+0

@ 99823:我個人喜歡#1,因爲我從未遇到過你的問題。在與SPA合作時,我只更新「更改內容」以提高性能。我不'替換整個對象。但我不能說這是最好的解決方案,每個人對什麼是最好的都有不同的看法。只需使用最適合您的解決方案即可。 –

+0

謝謝我現在要測試選項1,看看選擇是否正常工作 - 再次感謝 – 99823