2014-02-12 3 views
0

Скажем, у меня есть обратный вызов, который возвращает список объектов (и свойств), и я использую ng-option, чтобы вставить одно из свойств (имя) в раскрывающийся список, который используя ng-модель для присоединения к моему объекту модели.Доступ к нескольким свойствам угловой ng-опции

Моя проблема возникает, когда мне нужно получить доступ к другим свойствам выбранного объекта. ng-option позволяет мне связывать объекты с этим выпадающим списком, что отлично. Тем не менее, если я тяну имя, чтобы связать, что к моей модели:

<select ng-model="myModel.name" ng-options="fieldlist.fields.name as fieldlist.fields.name for fieldlist in metrics"> 

я теряю ссылку на остальную часть свойств объекта. Мне нужно использовать другое свойство выбранного объекта, например fieldlist.fields.location, для выполнения другого действия в функции изменения ng. Таким образом,

Возможно ли это? Является ли моя Угловая наивность слишком показательной?

ответ

0

Я считаю, что вы можете сделать:

ng-model="myModel" ng-options="fieldlist.fields as fieldlist.fields.name for fieldlist in metrics" 

Предполагая, что вы хотите MyModel содержать все поля в выбранном FieldList

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

ng-model="selectedItem" ng-change="setSelectedItem()" ng-options="fieldlist.fields.name as fieldlist.fields.name for fieldlist in metrics" 

, а затем в контроллере

$scope.setSelectedItem() = function() { $scope.myModel.name = selectedItem.name; }; 

или удалить нг-изменения и сделать

$scope.watch(selectedItem, function() { $scope.myModel.name = $scope.selectedItem.name } 

И тогда вы можете получить все имущество вам нужно от $scope.selectedItem

+0

Спасибо, @ Dave - Я был в состоянии сделать это. К сожалению, мне нужно только имя. Я еще не нашел хороший способ справиться с этим ... Я полный новичок с Angular, но беспокоюсь, что я уже сталкиваюсь с ограничениями! – entropy

+0

Бинго! Это сработало. Я согласен, что это не очень ... но я не знаю, как это сделать. Другим способом я делал копию моего массива показателей и делал сравнение. Твоя кажется более эффективной. Он чувствует себя очень ... не угловатым для меня. Похоже, я полностью нарушаю добросовестность модели. Мне бы хотелось узнать «правильный» способ сделать что-то подобное, но спасибо за вашу помощь! – entropy

0

Немного поздно, но хорошая информация, я нашел, если кто-то может использовать его. Его все еще немного странно, но он делает его немного чище. Угловая версия содержит директиву ngModelOptions, которая, помимо прочего, позволяет определить ngModel как функцию getter/setter. Используя это, вы можете удалить это pesky ng-change или watch (и, возможно, $ Digest?). Просто разместите свою функцию обновления как модель ng и настройте ее таким образом.

<select ng-model="updatefielset" ng-model-options="{getterSetter:true}" ng-options="fieldlist.fields as fieldlist.fields.name for fieldlist in metrics"> 



$scope.updatefielset(item) = function() 
{ 
    if(angular.isDefined(item) 
    { 
    $scope.myModel.A = item.A; 
    $scope.myModel.B = item.B; 
    $scope.Val = item; 
    } 
    return $scope.Val; 
}; 

https://docs.angularjs.org/api/ng/directive/ngModelOptions

Смежные вопросы