Обновите сферу из директивы и смотрите с другой

0

Вот проблема:

Я пытаюсь сделать что-то вроде этого:

  1. Нажмите на директиву, чтобы запустить событие
  2. Событие отправляет данные в функцию rootScope, которая устанавливает значение переменной области с новыми данными
  3. Другая директива имеет в своем шаблоне ng-модель, которая должна отражать ранее измененный var
  4. Данные должны обновляться в модели вида AND. Модель одобрена (обновление выполнено), но просмотр обновления не запускается автоматически, он обновляется только после нажатия кнопки "show" (см. Скрипку)

Вот соответствующий jsfiddle, который я сделал, с комментариями:

http://jsfiddle.net/wkmm576m/7/

Вот код, который, я думаю, создает проблемы...:

app.directive('addEditInput', function() {
    return {
        restrict : 'E',
        template : '<div id="editForm"><input type="text" ng-model="currentVar.name" /><br/></div>'
    }
});

Фактически, я возвращаю шаблон с ng-моделью. Но ng-модель не обновляется, когда ее значение изменяется из любого другого места...

Tbh, я немного смущен директивами и областями связи - данные....

Спасибо за чтение/помощь

Теги:
angularjs-directive

1 ответ

2
Лучший ответ

Короткий ответ - вам нужно вызвать $scope.$apply в верхнем контроллере: http://plnkr.co/edit/QEjzlsJj4fh1eeqBXSvt?p=preview

Длинный ответ: вы связываете обычную js-функцию с обычным js-событием, поэтому, когда пользователь нажимает на элемент - ваша функция выполняется. Это все. Когда вы используете ng-click - это вызовет цикл дайджест, и ваши привязки будут обновлены. Поэтому вам нужно вызвать его вручную, поэтому вы вызываете $scope.$apply.

Примечание: лучше не использовать jquery, где вам не нужно. Т.е. используйте $element.bind('click',function(){ вместо $().on... $element.bind('click',function(){ $().on...

  • 1
    Вы правы по своей причине, однако лучше не связывать вручную клик. Директива использует изолированную область видимости, поэтому проблем с использованием метода set для нее нет, и вместо этого используйте ng-click по кнопке в шаблоне, чтобы установить ее, что исключает необходимость вызова $apply вручную. Если бы он наследовал область действия, то его расширение могло бы быть проблематичным, но, как не так, это нормально. Смотрите скрипку: jsfiddle.net/wkmm576m/8
  • 0
    Это не работает. Это, вероятно, происходит от «изолированного контроллера», который я использую в своем полном проекте, посмотрите подробный пример, чтобы увидеть, что именно происходит: jsfiddle.net/xmbypv83
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню