Я пытаюсь написать что-то с помощью Angular Bootstrap Modal. Это вводит div в конец тела html, который не заключен в контроллер. В результате я не смог получить доступ к привязкам через $ scope, но по какой-то причине я могу записать их в представление из модели.
The code can be found here.
В строке 23 вы обнаружите, что $ scope успешно записан, и данные привязаны к входу. Однако, если вы затем отредактируете ввод, через 3 секунды привязанная к нему $ scope будет предупреждена, но изменения в представлении не будут отражены. Я обнаружил, что эту проблему можно решить, заключив модальное окно в отдельный контроллер, но тогда я не могу заставить работать то, что хочу.
Возможен ли доступ к измененной модели с контроллера?
2 ответа
Я нашел ответ, но не понимаю, в чем проблема, поэтому был бы признателен, если бы кто-нибудь мог объяснить.
Код необходимо изменить на:
$scope.data = {};
$scope.data.yn = 'this';
alert( $scope.data.yn );
setTimeout( function(){alert( $scope.data.yn )}, 3000 );
И вход в:
<input type="text" name="yourName" value="David" data-ng-model="data.yn" />
Из:
$scope = {};
$scope.yn = 'this';
alert( $scope.yn );
setTimeout( function(){alert( $scope.yn )}, 3000 );
Ввод:
<input type="text" name="yourName" value="David" data-ng-model="yn" />
См. страницу wiki на angular с лучшими практиками области применения.
Наследование области обычно является простым, и вам часто даже не нужно знать, что это происходит ... пока вы не попробуете двухстороннюю привязку данных (например, элементы формы, ng-модель) к примитиву (например, числу, строке, boolean), определенный в родительской области изнутри дочерней области. Это не работает так, как ожидает большинство людей. Что происходит, так это то, что дочерняя область получает собственное свойство, которое скрывает / затеняет родительское свойство с тем же именем. Это не то, что делает AngularJS - так работает прототипное наследование JavaScript. Новые разработчики AngularJS часто не осознают, что ng-repeat, ng-switch, ng-view и ng-include создают новые дочерние области видимости, поэтому проблема часто возникает, когда задействованы эти директивы. (См. Этот пример для быстрой иллюстрации проблемы.)
Этой проблемы с примитивами можно легко избежать, следуя «лучшей практике» - всегда иметь '.' в ваших нг-моделях - смотрите стоит 3 минуты. Misko демонстрирует примитивную проблему привязки с помощью ng-switch.
Похожие вопросы
Новые вопросы
angularjs
Используйте для вопросов об AngularJS (1.x), JavaScript-фреймворке с открытым исходным кодом. НЕ используйте этот тег для Angular 2 или более поздних версий; вместо этого используйте тег [angular].