получение ng-объекта, выбранного с помощью ng-change

Учитывая следующий элемент выбора

  

Есть ли способ заставить MAGIC_THING быть равным текущему выбранному размеру, поэтому у меня есть доступ к size.name и size.code в моем controllerе?

size.code влияет на многие другие части приложения (URL-адреса изображений и т. д.), но когда обновляется ng-модель item.size.code , item.size.name необходимо обновить для пользователя, обращенного вещи. Я предполагаю, что правильный способ сделать это – захватить событие изменения и установить значения внутри моего controllerа, но я не уверен, что я могу передать в обновление, чтобы получить правильные значения.

Если это совершенно неверный путь, я хотел бы знать правильный путь.

Вместо того, чтобы установить ng-model в item.size.code, как установить его размер:

  

Затем в вашем методе update() $scope.item будет установлено на $scope.item выбранный элемент.

И любой код, необходимый для item.size.code , может получить это свойство через $scope.item.code .

Скрипт .

Обновление, основанное на дополнительной информации в комментариях:

Затем используйте другое свойство $ scope для выбранной ng-модели:

  

controller:

 $scope.update = function() { $scope.item.size.code = $scope.selectedItem.code // use $scope.selectedItem.code and $scope.selectedItem.name here // for other stuff ... } 

Вы также можете напрямую получить выбранное значение, используя следующий код

   

script.js

  $scope.selectedTemplate = function(pTemplate) { //Your logic alert('Template Url is : '+pTemplate); } 

вы также попробуете это:

  

Если ответ Divyesh Rupawala не работает (передавая текущий элемент в качестве параметра), то, пожалуйста, см. onChanged() в этом Plunker. Он использует this :

http://plnkr.co/edit/B5TDQJ

  
 //Javascript $scope.update = function () { $scope.myItem; alert('Hello'); } 
  

Это может дать вам некоторые идеи

.NET C # View Model

 public class DepartmentViewModel { public int Id { get; set; } public string Name { get; set; } } 

.NET C # Web Api Controller

 public class DepartmentController : BaseApiController { [HttpGet] public HttpResponseMessage Get() { var sms = Ctx.Departments; var vms = new List(); foreach (var sm in sms) { var vm = new DepartmentViewModel() { Id = sm.Id, Name = sm.DepartmentName }; vms.Add(vm); } return Request.CreateResponse(HttpStatusCode.OK, vms); } } 

Угловой controller:

 $http.get('/api/department').then( function (response) { $scope.departments = response.data; }, function (response) { toaster.pop('error', "Error", "An unexpected error occurred."); } ); $http.get('/api/getTravelerInformation', { params: { id: $routeParams.userKey } }).then( function (response) { $scope.request = response.data; $scope.travelerDepartment = underscoreService.findWhere($scope.departments, { Id: $scope.request.TravelerDepartmentId }); }, function (response) { toaster.pop('error', "Error", "An unexpected error occurred."); } ); 

Угловой шаблон:

 

Фильтр AngularJS создан для меня.

Предполагая, что code/id уникален , мы можем отфильтровать этот конкретный объект с помощью filter AngularJS и работать с выбранными объектами. Учитывая приведенный выше пример:

   

{{size.name}}

Теперь есть три важных аспекта :

  1. ng-init="search.code = item.size.code" – при инициализации элемента внешнего элемента h1 select запрос фильтра к выбранному параметру .

  2. ng-change="update(MAGIC_THING); search.code = item.size.code" – при изменении ввода выбора мы запустим еще одну строку, которая установит запрос поиска к выбранному в данный момент item.size.code .

  3. filter:search:true – передать true для фильтрации, чтобы включить строгое сопоставление .

Вот и все. Если size.code является uniqueID , у нас будет только один элемент h1 с текстом size.name .

Я тестировал это в своем проекте, и он работает.

Удачи

Вам нужно использовать «track by», чтобы можно было правильно сравнивать объекты. В противном случае Angular будет использовать собственный метод сравнения объектов js.

Таким образом, ваш примерный код изменится на –

   

Это самый чистый способ получить значение из списка опций углового выбора (кроме Id или Text). Предположим, что у вас есть продукт. Выбирайте вот так на своей странице:

  

Затем в вашем controllerе задайте функцию обратного вызова следующим образом:

  $scope.onSelectChange = function () { var filteredData = $scope.productsList.filter(function (response) { return response.Id === $scope.data.ProductId; }) console.log(filteredData[0].ProductColor); } 

Просто объяснение: поскольку событие ng-change не распознает элементы опций в элементе select, мы используем ngModel для фильтрации выбранного элемента из списка параметров, загруженного в controller.

Кроме того, поскольку событие запускается до того, как ngModel действительно обновится, вы можете получить нежелательные результаты. Поэтому лучшим способом было бы добавить тайм-аут:

  $scope.onSelectChange = function () { $timeout(function () { var filteredData = $scope.productsList.filter(function (response) { return response.Id === $scope.data.ProductId; }) console.log(filteredData[0].ProductColor); }, 100); }; 
  • Получение MathJax для обновления после изменений в модели AngularJS
  • Как фильтровать (ключ, значение) с помощью ng-repeat в AngularJs?
  • Структура папки AngularJS
  • Кордова / Ионная: $ http-запрос не обрабатывается во время эмуляции или работы на устройстве
  • Разница между двойной и одной фигурной скобкой в ​​угловом JS?
  • Лучший способ предотвратить кеш IE в AngularJS?
  • Как поисковые системы работают с приложениями AngularJS?
  • Функция пользовательской сортировки в ng-repeat
  • ngRoute задает базовый url для всех маршрутов
  • Заполнение Dropdown 2 на основе выбора Dropdown 1
  • Как подождать, пока ответ поступит из запроса $ http, в angularjs?
  • Interesting Posts

    Как использовать jQuery с угловым?

    Требовать XML-элемент в XSD, когда другой элемент имеет определенное значение?

    Клиент службы WCF: текст типа контента / html; charset = utf-8 ответного сообщения не соответствует типу содержимого привязки

    Toshiba pendrive показывает 4 МБ вместо 8 ГБ; Что с ним могло случиться?

    Сколько данных может содержать список максимум?

    Запись файла на SDCard

    Переименуйте autocad в открытое со списком

    Программное обеспечение для чтения PDF-файлов с инвертированными цветами

    Стиль словаря заменяет несколько элементов

    Хорошее решение для домашних резервных копий и совместного доступа к файлам / принтерам

    Удаленный запуск машины, находящейся в выключенном состоянии?

    Что означают круглые скобки, связанные с объявлением объекта / функции / classа?

    Напишите много файлов в цикле for

    Как я могу перейти с Windows 7 на Windows 8 и сохранить свои файлы и приложения?

    Преобразование пикселей в точки

    Давайте будем гением компьютера.