ngModel не передает данные обратно в родительскую область в директиве

Related Post, but didn't help: Scoping issue when setting ngModel from a directive

EDIT: Могу ли я использовать ng-модель с изолированной областью? не работает или.

У меня возникла какая-то проблема, но сложнее, я думаю. Я хочу написать раскрывающееся меню, которое не использует никаких данных для сохранения данных. Я предпочел бы, чтобы ngModel позаботился об этом.

http://jsfiddle.net/QeM6g/6/

В приведенном выше примере jsFiddle показана демонстрация, где описанные выше методы не работают.

// this is what should work but doesn't
ngModel.$setViewValue(value);
scope.$apply(attr.ngModel,value);

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

9
nl ja de

2 ответы

Angularjs не очень хорошо справляется с прямыми связями с примитивными типами.

Если вы измените эту строку:

$scope.productId = 16;

к чему-то вроде этого:

$scope.selectedProduct = {
    id: 16
}

и измените эти ссылки на остальную часть кода, вы сможете преодолеть эту проблему.

jsFiddle: http://jsfiddle.net/M2cL7/

22
добавлено
@bmleite Не проблема с привязкой данных углов. Его о прототипировании javascript. Пожалуйста, прочитайте github.com/angular/angular.js/wiki/Understanding-Scopes </а>
добавлено автор Vivek, источник
Спасибо, я бы никогда не догадался. Спасли меня бессонные ночи. Я сообщил об этом как здесь для всех, кто хочет знать, будет ли это поведение быть фиксированным.
добавлено автор Richard Burkhardt, источник

Не связывайтесь с примитивами в области видимости, привязывайтесь к объекту в области.

From https://github.com/angular/angular.js/wiki/Understanding-Scopes

... пока вы не попробуете двухстороннюю привязку данных   (т. е. элементы формы, ng-model) к примитивному (например, числу, строке,   boolean), определенных в родительской области внутри области содержимого. Это   не работает так, как многие ожидают, что он должен работать. Что происходит   заключается в том, что дочерняя область получает свое собственное свойство, которое скрывает/затеняет   родительское свойство с тем же именем. Это не то, что AngularJS   выполнение - это то, как работает прототипное наследование JavaScript . новый   Разработчики AngularJS часто не понимают, что ng-repeat, ng-switch,   ng-view и ng-include все создают новые дочерние области, поэтому проблема   часто появляется, когда задействованы эти директивы.

     

Эту проблему с примитивами можно легко избежать, следуя   «наилучшая практика» всегда имеет «.». в ваших ng-моделях

так

<input ng-model="tweetText">

становится

<input ng-model="tweet.text">

Большое резюме здесь:

https://www.youtube.com/watch?v=ZhfUv0spHCY&feature=youtu.be&t=30m

5
добавлено
БЛАГОДАРИМ ВАС СПАСИБО ВАС БЛАГОДАРИТЬ YOOUUUUUUU !!
добавлено автор Stefan Vasiljevic, источник
Angular — русскоговорящее сообщество
Angular — русскоговорящее сообщество
3 960 участник(ов)

Общаемся на темы Angular 4+, его экосистемы, TypeScript, NativeScript и т.д. По вопросам SSR, Angular Universal @angular_universal_ru См. также: @typescript_ru, @react_js, @nodejs_ru, @js_ru Вакансии и поиск работы: @javascript_jobs

Angular.js (1.x) — русскоговорящее сообщество
Angular.js (1.x) — русскоговорящее сообщество
704 участник(ов)

Общаемся и обсуждаем темы, посвященные Angular 1.x и экосистеме.

AngularJS, Javascript
AngularJS, Javascript
370 участник(ов)

Angularjs russian chat