2016-03-27 22 views
0

私はいくつか問題があります。選択AngularJsの問題

私の範囲で2つのオブジェクトがあります 1)

tasks: 
    12: 
     id: 12 
     user_id: 1 

2)

users: 
    1: 
     id: 1 
     username: sergey 

は、私は(この例では、それはセルゲイなければなりません)デフォルト値を選択レンダリングしようとしています:

<select class="form-control" 
    data-ng-model="tasks[task.id].user_id" 
    data-ng-change="setWorker(task.id)" 
> 
    <option data-ng-repeat="user in users" data-ng-value="user.id" data-ng-selected="{[{user.id == task.user_id}]}">{[{user.username}]}</option> 
</select> 

しかし、2つのエラー(私の問題)で終わった: 1)私の選択のデフォルト値は空のオプション 2である)私の選択のように追加オプションO_Oがあります:サーバーの応答が約束を含むだったので、私は、起こっていると考え

<option value="? number:4 ?"></option> 

まず。私は、例えば、toJSONですべての私のデータを、これを解決:私がしたい、タスクにuser_idを変更しようとして例えば、私のサーバーに自分のデータや成功したクエリを更新した後 :

$scope.users = data.toJSON(); 

はまた、私は第三の問題点を持っています私の範囲を更新し、私のようにそれを実行します。

$scope.tasks[taksId].user_id = userId; 

その後、私は私自身の機能テストを()を実行したい、と私はウォッチャーを介してこれをやろうとしている:

$scope.$watch('tasks', function() { 
    $scope.test(); 
}) 

何も起こらなかった。何かお考えですか? = \代わりに、このようなng-optionsを使用してng-repeat試みを使用しての

+0

'? number:4? 'partは内部的なもので、値(4)は数値型であるため、' ngModel'にバインドすると '$ scope.tasks [task.id] 'が得られます。 user.id === "4。'(文字列) –

+0

だから、どうすればそれをエスケープできますか?私は、task_idのタスクからngModel my task.user_idにバインドしたいだけです。それはシンプルに見えるが、何も働かない。私はこの方法をさまざまな方法でレンダリングしようとしましたが、いつでも失敗しました( – Neversmile

+0

'data-ng-selected =" {[{user.id == task.user_id}} "'を削除して'data-ng-init ="タスク[task.id] .user_id =(user.id == task.user_id)?user.id:tasks [task.id] .user_id "' –

答えて

0

<select class="form-control" 
    data-ng-model="tasks[task.id].user_id" 
    data-ng-change="setWorker(task.id)" 
    data-ng-options="user.id as user.username for user in users"> 
</select> 

ng-optionsを使用して、あなたは文字列以外値の型を持つことができます。基本的には、これは「usersコレクションのすべてのユーザーに対して、user.usernameのテキストとuser.idの値のテキストを含むオプションを作成します」と表示されます。

+0

のようなユーザー名の値を持っています。 'ng-options = 'v.idはユーザーの(k、v)のv.usernameです。 だから最初の問題は解決しましたが、私は別のものを持っています: 私のデータと私のサーバに成功したクエリを更新した後、私は$ scope.taskのuser_idを変更しました: '$ scope.tasks [taksId] .user_id = userId;' そしてその後、私自身の関数 'test()'を実行したい、そして私はウォッチャーを通してこれをやろうとしています: '$ scope。'$ scope.test(); })' $ watchCollectionについては、idを試してみましたが効果はあります。 $ scope.tasksを変更するたびに$ scope.test()を使用する必要があります – Neversmile

+0

別の質問を作成して、どのような変更を監視しようとしているのか、正確に何を期待しているのかを説明できますかあなたが達成しようとしているのは何ですか?私はあなたがそうするなら、はるかに良い応答を受けると思います。 – Lex