2016-07-27 45 views
1

我在使用Angular時遇到了一些問題,並從下拉列表中選擇一個項目,並使Angular更新模型。在下拉菜單中按價值選擇的正確方法是什麼?

我一直在尋找StackOverflow,但只有部分運氣。

問題是,當我手動設置模型的值,我的下拉更新正確,但模型本身不更新;

$scope.setSelected = function(){ 
    $scope.selected.id = 15; 
    //$scope.$apply();// $apply already in progress 
} 

從StackOverflow上各種各樣的回答,我已經發現了角不知道這個更新和建議的答覆是,選擇運行一個$scope.$apply()$scope.$digest(),但都拋出一個異常$apply already in progress。我有一種感覺,這不是我做這件事的正確方法,因爲它沒有意義,你必須觸發一個事件來按價值選擇。

根據給定的值在下拉列表中選擇項目的正確方法是什麼?

完整的代碼示例可以在https://jsfiddle.net/c2x3jvut/

發現當點擊「選擇dinnerman」按鈕,在下拉更新正確,但已顯示的模型,然後點擊「登錄選擇」時,只顯示所選擇的模式,但與更新的ID。

回答

1

您可以使用$ filter來獲取整個對象而不是每個屬性。

$scope.setSelected = function(){ 
    $scope.selected = $filter('filter')($scope.persons,15,'id')[0]; 
    //$scope.selected.id = 15; 
    //$scope.$apply();// $apply already in progress 
    } 

Here is the modified version

+0

這是我後 - 非常感謝!我不得不做一個小調整設置{id:15},以確保Angular只查看id,但除此之外它的工作原理應該如此! –

1

ng's select根據其ngModel綁定其值,該ngModel在示例中正在被錯誤操作。正確的方法是改變ngModel的參考,而不是選擇的ID:

$scope.setSelected = function() { 
    $scope.selected = $scope.persons[1]; // yes 
    // $scope.selected.id = 15; // no 
}; 

Fiddle might have been updated顯示效果。

0

不知道我理解你的問題,但仍...

您可以包括在下拉菜單中的每個條目:

...ng-click="setSelected(<value>)"... 

,當然,參數添加到函數。

順便說一句,您是否知道在小提琴示例中,您正在函數setSelected中選擇ID 15?

0

您只是使用ID更新當前模型。但是,當你仔細看到名字和年齡保持不變。此外,您需要更新整個對象,如下所示:

$scope.setSelected = function(){ 
    $scope.selected.id = 15; 
    $scope.selected.name = "Dinner-man"; 
    $scope.selected.age = 20; 
    } 

或者任何其他直接更新對象的方法。

相關問題