ngModel.$render не вызывается при изменении модели

Я пытаюсь использовать tiny-mce с angular, но у меня возникли проблемы с функцией $render в директиве. Когда я обновляю модель, функция $render не вызывается.

Вот plunkr для иллюстрации: http://plnkr.co/edit/Ih1nDq?p=preview

Я не уверен, но я думаю, что это может быть связано с angular 1.2, потому что с angular 1.1.5 он работает: http://plnkr.co/edit/LXAtHd?p=preview

Это ошибка angular 1.2, или я пропустил что-то новое с angular 1.2?


person vianney    schedule 27.11.2013    source источник


Ответы (2)


Насколько я вижу, функция $render вызывается только один раз. Если вам нужно обновить свое представление об изменениях модели, вы можете добавить функцию в массив $viewChangeListeners:

ngModel.$viewChangeListeners.push(function () {
    updateView(ngModel.$viewValue);
});

Я надеюсь, что кто-то может дать более подробную информацию о том, почему $render ведет себя по-другому в Angular 1.2.

person Christof Aenderl    schedule 12.01.2014

Этот ответ показывает код, который вам нужен в вашей директиве, чтобы при необходимости отключить рендеринг:

TinyMCE ‹textarea› двусторонняя связь с AngularJS

        // When your model changes from the outside, use ngModel.$render to update the value in the textarea
        ngModel.$render = function () {
            textarea.val(ngModel.$viewValue);
        };

Также сравните с этой функцией рендеринга из angular-ui-tinymce ( https://github.com/angular-ui/ui-tinymce )

    ngModel.$render = function() {
      if (!tinyInstance) {
        tinyInstance = tinymce.get(attrs.id);
      }
      if (tinyInstance) {
        tinyInstance.setContent(ngModel.$viewValue || '');
      }

Plnkr: http://plnkr.co/edit/04AFkp?p=preview

Однако в зависимости от времени загрузки вашего DOM вам может потребоваться установить приоритет вашей директивы вверх. :-)

person Paul B. Hartzog    schedule 21.02.2014