Заполнение выпадающих меню URL

0

Я столкнулся с очень сложной проблемой. Мой Угловой пользовательский интерфейс дает пользователям 3 раскрывающихся меню, а 3-е меню - динамическое, основанное на двух предыдущих меню. Это прекрасно работает. У меня также есть динамический URL-адрес, который отображается в 3 раскрывающихся меню, поэтому браузер может автоматически их заполнять. Например, если URL-адрес браузера "/home? SelectedLetter = A & selectedNumber = 2 & selectedColor = 7891", то после того, как я вставляю этот URL-адрес на новую вкладку, выпадающие списки должны автоматически устанавливаться на A, 2 и Black (что соответствует 7891 в массиве).

Тем не менее, только выпадающие списки selectedLetter и selectedColor заполняются, как ожидалось, selectedColor пуст (после отладки я нашел его, потому что setColorSelection() никогда не вызывается. Ng-change() вызовы в первых двух меню никогда не запускаются). Браузеру определенно известно, что selectedColor - 7891, но просто не отображает его в пользовательском интерфейсе. Даже если я смогу его показать, как мне преобразовать его в "Черный" в меню? Я просто не могу обойти эту проблему. Есть идеи?

HTML:

<select ng-model="selectedLetter" 
        ng-change="setColorSelection()" 
        ng-options="letter as letter for letter in letters">
</select>
<select ng-model="selectedNumber" 
        ng-change="setColorSelection()" 
        ng-options="number as number for number in numbers">
</select>
<select ng-model="selectedColor" 
        ng-options="color.ID as color.colorName for color in colorSelection">
</select>

Угловой внутренний контроллер:

$scope.letters = ['A', 'B'];
$scope.numbers = ['1', '2'];

var colors = {      // Note that all IDs are unique
    'A1': [{"colorName": "Red", "ID": "1001"}, {"colorName": "Pink", "ID": "3002"}],
    'A2': [{"colorName": "Blue", "ID": "9022"}, {"colorName": "Black", "ID": "7891"}],
    'B1': [{"colorName": "Yellow", "ID": "5436"}, {"colorName": "Orange", "ID": "4444"}]
};

$scope.colorSelection = [];


// This populates selectedLetter and selectedNumber, doesn't work for selectedColor
var params = $location.search()
if (params.selectedLetter) {
    $scope.selectedLetter = params.selectedLetter;
}
if (params.selectedNumber) {
    $scope.selectedNumber = params.selectedNumber;
}
if (params.selectedColor) {
    $scope.selectedColor = params.selectedColor;
}


$scope.setColorSelection = function() {
    if ($scope.selectedLetter && $scope.selectedNumber) {
        $scope.colorSelection = colors[$scope.selectedLetter + $scope.selectedNumber];
    }
}
  • 0
    Эй, приятель, ты пытался утешить значение для выбранного цвета? можешь взять филе, пожалуйста?
  • 0
    @Kailas значение консоли для selectedColor равно 7891, просто пользовательский интерфейс не показывает 7891 или «черный»
Показать ещё 2 комментария
Теги:
user-interface
angularjs-ng-change

1 ответ

0
Лучший ответ

ng-change запускается только тогда, когда ng-change значение поля выбора. Итак, попробуйте использовать:

if (params.selectedColor) {
    if ($scope.selectedLetter && $scope.selectedNumber) {
        $scope.colorSelection = colors[$scope.selectedLetter + $scope.selectedNumber];
    }
    $scope.selectedColor = params.selectedColor;
}

Чтобы colorSelection был готов до установки модели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню