2013-03-23 3 views
0

Я изучаю AngularJS, и у меня есть вопрос относительно привязки данных для отдельных элементов. Связывание данных для текстовых полей работает без какого-либо кода обработки событий. Как только атрибут ng-model будет установлен для обновления текстового поля при изменении свойства модели и наоборот. Нет необходимости в атрибуте ng-change.AngularJS непоследовательная привязка данных

Однако для элементов выбора нам нужно написать функции, которые будут вызываться через атрибут ng-change.

Почему angularjs обрабатывает привязку данных без атрибута ng-change для текстовых полей, но требует функций, которые будут вызваны через атрибут ng-change для отдельных элементов?

ОБНОВЛЕНИЕ: Добавлена ​​скрипка в разделе комментариев. Пример от AngularJS в книге действий. Нажмите на одну из историй, измените значение текстового поля и обновите модель. Изменить выбор в раскрывающемся списке не обновляется.

ОБНОВЛЕНИЕ: Добавлена ​​новая скрипка в комментариях.

Спасибо.

+0

наполняются ты выберите с жестко закодированными элементами '

+0

Вот скрипка: http: //jsfiddle.net/a5SUS/32/ – Alper

+0

Использование консоли браузера увидит ошибку' typesIndex is is undefined'. вы используете его в одной функции, но нигде не указали – charlietfl

ответ

1

Я создал скрипку, которая работает here - Проблема на самом деле - это только фиктивные данные здесь. В исходной скрипте объект, созданный в массиве состояний для {name: 'Back Log'} и {name: 'To Do'}, не совпадает (не ===) как {name: 'Back Log'} и {name: 'To Do'} объекты, созданные в объектах фиктивной истории.

Чтобы сделать пример работы, я передаю индексированные статусы в функцию getStories. Однако я думаю, что это действительно просто случай, вызванный демонстрацией путаницы. (Я смотрел на MEAP для Угловое в действии, а также, и я думаю, что это может быть немного упрощен like this one, который использует простые строковые статусы, которые будут проходить тест ===

var getStories = function(statusesIndex) { 
    var tempArray = [ 
     {title:'Story 00', 
     description:'Description pending.', 
     status: statusesIndex['To Do'] 
     }, 
     {title:'Story 01', 
     description:'Description pending.', 
     status: statusesIndex['Back Log'] 
     } 
]; 
    return tempArray; 
} 
0

Если я правильно понял ваш вопрос, я думаю, что ваши предположения ошибочны, потому что для выборочных боксов вам не нужно вызывать событие ng-change, чтобы извлечь выбранный параметр.

<select ng-model='select'> 
    <option>....</option> 
    <option value='one'>One</option> 
    <option value='Two'>Two</option> 
</select> 

// Your selected option will print below... without invoking ng-change 
<div>You selected: {{select}}</div> 

Демо: http://jsfiddle.net/jenxu/1/

+0

Когда я меняю выбранный вариант, это изменение не отражается в модели для меня. – Alper

+0

@Alper демо в ответ работает. Создайте собственную демоверсию, которая реплицирует проблему. – charlietfl

+0

Создано демо-приложение @charlietfl. – Alper

1

Я думаю, что ваша путаница может быть результатом select documentation еще является некорректным. (См. Мой Disqus comment.) ng-model может и должен использоваться с select. ng-change является необязательным, и он просто дает вам крючок, если вы хотите что-то делать каждый раз, когда выбранная опция изменяется.

Обычно вы должны использовать ng-options с выбором.

+0

Я не могу получить двустороннюю привязку для работы без изменения ng. См. Мой комментарий выше и связанную скрипку. – Alper