0

データストアからロードされたデータを表示しようとしていますが、UI の変更が反映されていません。私が達成しようとしていることの一般的な考え方を示す例を作成しました。

http://plnkr.co/edit/MBHo88

これは、クリックするとドロップダウンがクリアされるAngularjsの例へのリンクです。式をリストのドロップダウンの色の 1 つに置き換えると、適切に選択されます。このタイプの選択はユーザー イベントでのみ機能しますか?

http://docs.angularjs.org/api/ng.directive:select

助けていただければ幸いです!!!

4

3 に答える 3

1

実際の問題は、ngSelect が単純な比較演算子 ('==') を使用してオブジェクトを比較するため、同じフィールドと値を持つ 2 つのオブジェクトが異なるオブジェクトと見なされることです。

したがって、文字列と数値を値として使用することをお勧めします (ngSelect ディレクティブの式の「select」パラメーター)。

これが plunkerの一種の解決策です

また、GitHub でこのトピックに関するいくつかの議論があります: https://github.com/angular/angular.js/issues/1302 https://github.com/angular/angular.js/issues/1032

また、私が見出したように、オブジェクトで ngSelect をより簡単に使用できるようにするために、ngSelect にカスタム コンパレータ/ハッシュを追加する作業が進行中です。

于 2013-01-07T16:44:45.927 に答える
0

コントローラーの初期化の 1 つの間違い。paletteこれらはビューで監視されるため、 内のオブジェクトを参照する必要があります。

$scope.selectedColors.push({col: $scope.palette[2]});
$scope.selectedColors.push({col: $scope.palette[1]});

あなたと同じresult

$scope.result = { color: $scope.obj.codes[2] };

次に、 を見る必要がありますresult。以下の例では、選択 1 は開始選択から値を受け取り、2 番目はパレットの下の値を受け取ります。それがあなたが望んでいたものかどうかはわかりませんが、簡単に変更できます。

$scope.$watch('result', function(value) {
   if(value) {
      var index = value.color.code -1;
      $scope.selectedColors[0] = {col: $scope.palette[index] };
      $scope.selectedColors[1] = {col: $scope.palette[Math.max(index-1, 0)] };
   }
}, true);

plunkrを参照してください。

于 2013-01-07T16:53:39.843 に答える
0

わかりました、私はこれを理解したと思いますが、@ValentynShybanov と @asgoth に感謝します。

angularjs の例によると、ngModel は、ドロップダウン ポピュレーションで使用される配列のオブジェクトの 1 つで初期化されます。したがって、配列は次のようになります。

$scope.locations = [{ state: 'FL', city: 'Tampa'}, {state: 'FL', city: 'Sarasota'} ....];

ドロップダウンは次のように定義されます。

<select ng-options="l.state group by l.city for l in locations" ng-model="city" required></select>

$scope.city は次のように初期化されます。

$scope.city = $scope.locations[0];

これまでのところとても良いですよね?!!!!..しかし、複数の場所があるため、複数のドロップダウンがあります。また、ユーザーはさらに追加/削除できます。テーブルを動的に作成するようなものです。また、データストアからデータをロードする必要がありました。

同様の値を作成して割り当てていましたが (例: データ ストアからの値 --> State = FL, City = Tampa; したがって --> { state : 'FL', city : 'Tampa' })、angularjs はそうではありませんでした。値を一致させることができます。{city : 'Tampa'} or 'Tampa' or and or and or...

だから私がしたこと..そして私が知っているのは、ちょっと厄介なことですが、これまでのところうまくいきます.. $scope.locationsから値を返すルックアップ関数を書くことです. したがって、私は持っています:

$scope.lookupLocation = function(state, city){
   for(var k = 0; k < $scope.locations.length; k++){
      if($scope.locations[k].state == state && $scope.locations[k].city == city)
         return $scope.locations[k];
   }
   return $scope.locations[0]; //-- default value if none matched
}

したがって、データストアからデータ (json 形式のデータ) をロードするときは、次のように lookupLocation 関数を呼び出します。

$scope.city = $scope.lookupLocation(results[indexFromSomeLoop].location.state, results[indexFromSomeLoop].location.city);

そして、データをロードするときに値を事前に選択します。これが私のために働いたものです。

ありがとう

于 2013-01-08T15:46:20.193 に答える