2015-11-24 6 views
0

Вот проблема:Update сфера из директивы и смотреть с другой один

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

  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>' 
    } 
}); 

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

ТВН, я немного запутался с директивами и области коммуникаций - данные ....

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

ответ

2

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

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

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

+1

Вы правы по своей причине, однако лучше не вручную связывать клик. Директива использует изолированную область, поэтому нет никакой проблемы с использованием метода 'set' и использовать' ng-click' на кнопке в шаблоне, чтобы установить ее вместо этого, отрицая необходимость ручного вызова '$ apply' , Если бы он наследовал сферу действия, то расширение его могло бы быть неприятным, но поскольку это не так. Смотрите скрипку: http://jsfiddle.net/wkmm576m/8/ – ste2425

+0

Это не работает. Вероятно, это происходит из «изолированного контроллера», который я использую в своем полном проекте, см. Этот подробный пример, чтобы узнать, что именно происходит: http://jsfiddle.net/xmbypv83/ – Julo0sS

+0

Нажмите «VIEW» во втором столбце и вы увидите, что div (директива), которая должна отображать текущие данные, не обновляется! (Обратите внимание, что он должен быть связан двумя способами с глобалскопом, поскольку впоследствии он должен быть отредактирован в шаблоне директивы через входы) – Julo0sS