微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs ckeditor指令有时无法从服务加载数据

我使用 Vojta’s angularJS directive,但有时ckeditor将无法显示服务中的数据.这几乎从来没有发生在刷新,但通常发生在导航回页面.我能够验证$render函数总是使用正确的数据调用ck.setData,但有时它不会显示.
看来,$render方法有时在ckeditor准备好之前被调用.我可以通过添加一个监听器到instanceReady事件来解决这个问题,以确保它在ckeditor准备就绪后至少被调用一次.
ck.on('instanceReady',function() {
    ck.setData(ngModel.$viewValue);
  });

为了完整起见,这里是我使用的完整指令.

//Directive to work with the ckeditor
//See https://stackoverflow.com/questions/11997246/bind-ckeditor-value-to-model-text-in-angularjs-and-rails
app.directive('ckEditor',function() {
  return {
    require: '?ngModel',link: function(scope,elm,attr,ngModel) {
      var ck = CKEDITOR.replace(elm[0],{
                toolbar_Full:
                [
                { name: 'document',items : [] },{ name: 'clipboard',items : [ 'Cut','copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },{ name: 'editing',items : [ 'Find','Replace','SpellChecker','Scayt' ] },{ name: 'forms',{ name: 'basicstyles',items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript' ] },{ name: 'paragraph',items : [
                'NumberedList','BulletedList','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },{ name: 'links',{ name: 'insert',items : [ 'SpecialChar' ] },'/',{ name: 'styles',items : [ 'Styles','Format','Font','FontSize' ] },{ name: 'colors',{ name: 'tools',items : [ 'Maximize' ] }
                ],height: '290px',width: '99%'
            }
    );

      if (!ngModel) return;

      //loaded didn't seem to work,but instanceReady did
      //I added this because sometimes $render would call setData before the ckeditor was ready
      ck.on('instanceReady',function() {
        ck.setData(ngModel.$viewValue);
      });

      ck.on('pasteState',function() {
        scope.$apply(function() {
          ngModel.$setViewValue(ck.getData());
        });
      });

      ngModel.$render = function(value) {
        ck.setData(ngModel.$viewValue);
      };

    }
  };
});

原文地址:https://www.jb51.cc/angularjs/140523.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐