【问题标题】:ngModel.$render is not called when model change模型更改时不调用 ngModel.$render
【发布时间】:2013-11-27 14:15:36
【问题描述】:

我正在尝试将 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 的新内容?

【问题讨论】:

    标签: angularjs angular-ui tinymce-4


    【解决方案1】:

    据我所知,$render 函数只被调用一次。如果您需要更新模型更改的视图,您可以向 $viewChangeListeners 数组添加一个函数:

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

    我希望有人能详细说明为什么 $render 在 Angular 1.2 中的行为不同。

    【讨论】:

      【解决方案2】:

      此答案显示了您在指令中需要在必要时触发渲染的代码:

      TinyMCE <textarea> two way bound with 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 的时间,您可能需要向上设置指令的优先级。 :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-18
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 2015-09-27
        • 2018-07-15
        相关资源
        最近更新 更多