Сравнение равенства объектов для input [radio] с ng-моделью и ng-значением

Позвольте мне начать с того, что этот вопрос очень похож на проблемы с выбором в пометить с помощью ng-options. Например,Работа с выбором с помощью AngularJS 's ng-options, Конкретной проблемой является сравнение двух разных экземпляров объекта, которые не равны ссылкам, но которые логически представляют одни и те же данные.

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

$scope.items = [
   {ID: 1, Label: 'Foo', Extra: 17},
   {ID: 2, Label: 'Bar', Extra: 18},
   {ID: 3, Label: 'Baz', Extra: 19}
];
$scope.selectedItem = {ID: 1, Label: 'Foo'};

Обратите внимание, что вышеуказанные объекты только для демонстрации. Я специально остановилсяЭкстра» собственность наselectedItem чтобы показать, что иногда мои модельные объекты отличаются по своим специфическим свойствам. Важно то, что я хочу сравнить по идентификатору свойства. у меня естьequals() функция на моих реальных объектах, которая сравнивает оба прототипаучебный класс' и ID.

И тогда в представлении:


     {{item.Label}}

Теперь проблема в том, что переключатель дляFoo» не будет выбран, потому что angular использует равенство ссылок для объектов. Если бы я изменил последнюю строку в моей области действия ниже, все будет работать, как ожидалось.

$scope.selectedItem = items[0];

Но проблема, которую яЯ имею в том, что в моем приложении яя не просто объявляю эти две простые переменные в области видимости. Скорее, список параметров и структура данных, с которой связан выбранный параметр, являются частью больших наборов данных JSON, которые запрашиваются с сервера с использованием $ http. В общем случае этоМне очень трудно изменить выбранное свойство с привязкой к данным, чтобы оно было эквивалентным параметру из моего запроса данных.

Итак, мой вопрос: в нг-опциях дляУгловой предлагаетtrack by выражение, которое позволяет мне сказать что-то вродеobject.ID» и сообщите angular, что он должен сравнить выбранное значение модели с опциями через свойство ID. Есть ли что-то похожее, что я могу использовать для нескольких радиовходов, привязанных к одному и тому же свойству модели? В идеале я мог бы сказать angular использовать свой собственный метод equals (), который япомещаем на эти объекты модели, который проверяет как тип объекта, так и идентификатор. Если это не удастся, то также можно будет использовать сравнение идентификаторов.

Ответы на вопрос(5)

Ваш ответ на вопрос