3

簡単にするために、ajax呼び出しから取得した新しいアイテムのリストで選択リストを更新しようとしています。リストにはアイテムがあります。モデルを新しいリストに設定し、$scope.$apply() を実行します。これはFirefoxではうまく機能しますが、IEでは機能しません。私は何を間違っていますか?私が見逃しているIE9のものはありますか?(私は今数時間探していましたが、あきらめる準備ができています)。私が得ることができるすべての助けに感謝します。

HTML:

<select 
  ng-model="SelectedParameter" 
  ng-options="Parameter.Name for Parameter in AllParameters">
</select>

JS:

$.getJSON("/Cont/GetList", {id: id}, 
  function (result) {
    var allParameters = result.Data.AllParameters;
    $scope.AllParameters = allParameters;
    $scope.$apply();  
  }
);
4

3 に答える 3

6

これを「Angularの方法」で行う方がはるかに良いでしょう。JQuery は必要ありません。実際、「JQuery の方法」で物事を行っていることに気付いた場合は、おそらくそれが間違っています。Mark Rajcok は、少し前に StackOverflow でこれと同じことについて本当に良い質問 (および回答) をしました:

app.js

//declare your application module.
var app = angular.module('myApp', []);

//declare a controller
app.controller('MainCtrl', function($scope, $http) {
   //function to update the list
   $scope.updateList = function () {
      $http.get('/Cont/GetList', function(data) {
         $scope.allParameters = data;
      });
   };

   //initial load
   $scope.updateList();
});

index.html

<!DOCTYPE html>
<html ng-app="myApp">
<head>
   <script src="angular.js"></script>
   <script src="app.js"></script>
</head>
<body>
  <div ng-controller="MainCtrl">
    <button ng-click="updateList()">Update</button>
    <ul>
       <li ng-repeat="parameter in allParameters">{{parameter | json}}</li>
    </ul>

    <!-- EDIT: Because you requested a select.
         or if you wanted to do a select list 
         assuming every object in your array had a "name" property
         you wanted to display in the option text, you could do
         something like the following: 

         (NOTE: ng-model is required for ng-options to work)
         -->
    <select ng-model="selectedValue" ng-options="p as p.name for p in allParameters"></select>

    <!-- this is just to display the value you've selected -->
    <p>Selected:</p>
    <pre>{{selectedValue | json}}</pre>
  </div>
</body>
</html>

編集: IE の一般的な問題

まず、IE で問題が発生した場合は、F12 キーを押して、コンソールで発生しているエラーを確認することをお勧めします。

console.log()IE で問題が発生する最も一般的な問題は、IE に存在しないコマンドなどに関連しています。その場合は、次のようにスタブを作成する必要があります。

//stub in console.log for IE.
console = console || {};
console.log = console.log || function () {};
于 2013-03-22T22:43:52.000 に答える
2

IEの問題だと思います。更新する前に設定を試しdisplay:none、更新後に設定を削除してdisplayください。

于 2013-04-09T14:02:08.657 に答える