0

以下のコードを考えてみましょう。

私の AngularJS アプリでは、$scope.records のオブジェクトにカテゴリ [0] を入力すると、それらがリンクされ、ビューにカテゴリ プロパティを表示できます。

JS:

$scope.categories = [{
    title: 'Category 1'
}, {
    title: 'Category 2'
}];

$scope.records = [{title: 'New record', category: $scope.categories[0]}];

HTML:

<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category in categories"></select>

しかし:オブジェクトの配列を文字列化してから再度解析すると...

var json = JSON.stringify($scope.records);
var parsedJson = JSON.parse(json);

$scope.records = parsedJson;

...「リンクを緩め」、基本的にコピーを作成しているため、カテゴリは「選択済み」として表示されません。理由は次のとおりです。

$scope.records[0].category === $scope.categories[0]false と評価されます。

これを回避するアイデアはありますか?

その場合、本当にばかげた質問かもしれません:ごめんなさい:-)

4

2 に答える 2

0

試す

$scope.$apply(function() {
   $scope.records = parsedJson;
});

つまり、あなたの例では、angularjs は何かが変更されたことを認識しておらず、$scope.$apply呼び出しで通知する必要があります。http://docs.angularjs.org/api/ng .$rootScope.Scope を確認してください

この例は、たとえば純粋な jquery get メソッドを使用して、angularjs の外部で ajax 呼び出しを介してフェッチされた変数をスコープに割り当てようとしている場合と非常によく似ています。この場合、(疑似コード)のようなことをしました:

$.get("/api/something.json", function(results) {
  $scope.$apply(function() {
     $scope.records = results;
  });
});
于 2013-10-17T15:40:26.050 に答える
0

完全なカテゴリ オブジェクトをレコードにマッピングする代わりに、それをマッピングしidますname

$scope.records = [{title: 'New record', category: $scope.categories[0].id}];

選択式は次のようになります

<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category.id in categories"></select>
于 2013-10-17T15:41:25.497 に答える