2016-07-28 3 views
0

を変更したときに、私はのように見えるJSONオブジェクトを持って更新していません。私はこれを達成するためにng-optionsを使用しています:NG-オプションは、モデルが

<select ng-options="item as item.empName for item in employees track by item.ID" ng-model="emp.selected"> 
</select> 

私はハードコードJSON場合は、変数employeesに私のコントローラで選択をレンダリングします。しかし、私が使用する場合:

$.getJSON("path to JSON file",function(json){ 
    $scope.employees = json; 
}); 

選択が行われません。 $ scopeに追加しようとしましたが、$ apply()は役に立たなくなりました。助言がありますか?ボード上の磯からの回答を撮る

アップデート1

は、私はまだ選択を結合しないで残っています。例えば、私のjavascriptの場合:

app.controller('Ctrl', ['$scope', '$http', function($scope, $http) { 

    $scope.employees = [ 
     { 
     "empName": "John", 
     "ID": 1 
     }, 
    ]; 

    $http.get(" --PATH TO JSON-- ").then(function (res) { 
     $scope.employees = res.data; 
     console.log($scope.employees); 
    }); 
}]); 

選択はまだのみconsole.logは、すべての3つの名前を持つ完全なオブジェクトを返すという事実にもかかわらず、最初の名「ジョン」で移入されます。

答えて

0

$timeout内のコードをラップ:

$.getJSON("path to JSON file", function (json) { 
    $timeout(function() { 
     $scope.employees = json; 
    }) 
}); 

ダイジェストサイクルがすでに進行中であるときに$applyへの呼び出しが失敗することがあります。

しかし$httpを使用しての代わりに、データを引き出すためにはjQueryを使用することを検討してください。

+0

こんにちはShashankこれは、 'プロパティを読み取ることができません'というプロトコル 'undefined'を返しています。私はそれを診断するように見えることはできません。何か案は? –

+0

このエラーはどこにありますか? –

1

あなたはどちらか$scope.$evalAsync()を呼び出し、または(私が推薦する)ここでは代わりにjQueryの$httpを使用する必要があります。

$http.get("path to JSON file").then(function (res) { 
    $scope.employees = res.data; 
}); 

この理由は、jQueryのであるのに対し$httpは、サイクルをダイジェスト「AngularJSを認識しているということですない。

$scope.$apply()(ダイジェストサイクルが進行中の場合は失敗する可能性があります)、および$timeout(すべてのスコープのダイジェストサイクルを引き起こすため重い)を使用しないでください。

+0

こんにちは私はうまく動作していないように思えます。アップデート1をご覧になれば幸いです。 –

0

$qライブラリで約束を使用する必要があります。

var getEmployees = function() { 
     var deferred = $q.defer(); 
     $.getJSON("path to JSON file", function (json) { 
      deferred.resolve(json); 
     }); 
     return deferred.promise; 
    } 

    getEmployees().then(res){ 
     $scope.employees = res.data; 
    } 

EDIT あなたは$timeoutを使用する場合、それはあなたがシンクロニシティを制御できていないと、本当にとして正しい解決策ではありません。しかし、$httpを使って電話をかけると、約束が組み込まれていると私は信じています。

+0

こんにちはitamar私はこれを試したことは恐れて、それは動作していないようです。レスポンスであっても、追加の従業員をハードコードすると、ビューは選択肢に名前を表示しません。 –