2016-03-27 74 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我所有的數據,例如:

$scope.users = data.toJSON(); 

也對我有第三個問題: 我的數據和查詢成功更新到我的服務器,例如試圖在任務改變USER_ID後,我想更新我的範圍,我這樣做:

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

之後,我要執行我自己的功能測試(),我試圖通過觀察者做到這一點:

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

但沒有發生。你有什麼想法嗎? = \

+0

'?編號:4?'部分只是一個有角度的內部事物,告訴它值(4)來自數字類型,所以當你將它綁定到'ngModel'時,你會得到'$ scope.tasks [task.id]。 user_id === 4'(number)而不是'$ scope.tasks [task.id] .user_id ===「4」'(string) –

+0

那麼,我該如何逃避它呢?我只想通過task_id從任務綁定到ngModel我的task.user_id。它看起來很簡單,但沒有用。我嘗試以不同的方式呈現此選擇,但隨時失敗( – Neversmile

+0

我認爲您可以嘗試刪除'data-ng-selected =「{[{user.id == task.user_id}]}」'並將其替換爲'data-ng-init =「tasks [task.id] .user_id =(user.id == task.user_id)?user.id:tasks [task.id] .user_id」' –

回答

0

而不是使用ng-repeat嘗試使用ng-options這樣的:

<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可以讓你有非字符串值類型。基本上這是說「對於用戶集合中的每個用戶,請使用user.username和user.id中的值創建一個選項。

+0

感謝它的工作原理以及: 'ng-options ='v.id as v.username for(k,v)in users'' 所以第一個問題解決了,但我有另一個: 在更新我的數據和成功的查詢到我的服務器後,我更改$ scope.task中的user_id,如: '$ scope.tasks [taksId] .user_id = userId;' 之後,我想執行我自己的函數'test()'和我試圖通過觀察者來做到這一點: '$ scope。$ watch('tasks',function(){ $ scope.test(); })' 我讀了$ watchCollection,試過了id但是有效果。在每次更改$ scope.tasks後,我必須使用$ scope.test() – Neversmile

+0

您是否介意爲此創建一個單獨的問題,以便您可以詳細說明要監視的更改,您期望的是什麼解僱那個看不到的觀察者,你試圖完成什麼?我想如果你這樣做,你會收到更好的迴應。 – Lex