45

クライアント名を表示するために選択を使用しています。ユーザーは既存のクライアントを選択できる必要があります。これにより、スコープ プロパティが更新されます。

コントローラ

「最初のピック」を初期化しています。

if($scope.clients.length > 0) $scope.existingClient = $scope.clients[0];

意見

<select
    id='nm-existing-client-name'
    class='form-control  input-lg'
    ng-model='existingClient'
    ng-options="client.name for client in clients">
</select>

選択メニューが変更されても、スコープ プロパティexistingClientは変更されません。値が初期化されていない場合 (上記のコントローラー行が削除されている場合)、 の値はexistingClient未定義のままになります。

をアタッチするng-changeと、値が変更されたときに起動しますが、モデル自体は新しい値に更新されません。

AngularJS v1.2.0-rc.3を使用しています。

4

2 に答える 2

125

おそらく子スコープを使用していて、それを知らないと思います。 ng-ifng-repeatng-switchおよびng-includeすべてが子スコープを作成します。スコープの値は継承されますが、子スコープの値を変更すると、子スコープに値が設定され、継承された値は親で変更されません。代わりにオブジェクトを使用して値を保持し、それが修正されるかどうかを確認してください。スコープに直接値を設定するのではなく、オブジェクトにプロパティを設定するだけなので、親スコープの継承されたオブジェクトを使用して値を更新します。

$scope.data = {
    existingClient: $scope.clients.length > 0 ? $scope.clients[0] : undefined
};

意見:

<select ng-model="data.existingClient" 
        ng-options="client.name for client in clients">
</select>

Chrome でAngularJS Batarang 拡張機能を使用して、スコープのデバッグに役立てることができます。

于 2013-10-16T18:05:47.590 に答える
1

これは、パラメーターを $scope オブジェクトに保持するためのソリューションでもあります。

コントローラ:

$scope.scope = $scope;
$scope.clients = [];
$scope.existingClient = $scope.clients.length > 0 ? $scope.clients[0] : undefined;

見る:

<select ng-model="scope.existingClient" ng-options="client.name for client in clients"></select>
于 2014-02-07T13:27:14.890 に答える