angular.js - angular-ueditor使用中,插入图片,加载完成后不更新angularmodel的问题;
我想大声告诉你
我想大声告诉你 2017-05-15 17:11:01
0
1
800

使用百度编辑器时,插入图片初始为loading图,载入成功后才显示上传的图片,
插入图片后不做任何修改时,控制器中的model是这样的

<p><img class="loadingclass" id="loading_iwwwjn6l" src="http://d.com:12080/Public/backend/lib/ueditor/themes/default/images/spacer.gif" title="正在上传..."/></p>

即使图片已经上传成功,在编辑器已经显示出来了,但是model中还是没有得到修改,只有再修改点其他东西,触发ueditor的changecontent事件后,才会修改model;
udeitor指令中的监听changecontent:

_self.editor.addListener("contentChange", function() {
    ctrl.$setViewValue(_self.editor.getContent());
    if (!_updateByRender) {
      if (!$S.$$phase) {
        $S.$apply();
      }
    }
    _updateByRender = false;
  });

查看ueditor源码:

function callback(){
    try{
        var link, json, loader,
            body = (iframe.contentDocument || iframe.contentWindow.document).body,
            result = body.innerText || body.textContent || '';
        json = (new Function("return " + result))();
        link = me.options.imageUrlPrefix + json.url;
        if(json.state == 'SUCCESS' && json.url) {
            loader = me.document.getElementById(loadingId);
            loader.setAttribute('src', link);
            loader.setAttribute('_src', link);
            loader.setAttribute('title', json.title || '');
            loader.setAttribute('alt', json.original || '');
            loader.removeAttribute('id');
            domUtils.removeClasses(loader, 'loadingclass');
        } else {
            showErrorLoader && showErrorLoader(json.state);
        }
    }catch(er){
        showErrorLoader && showErrorLoader(me.getLang('simpleupload.loadError'));
    }
    form.reset();
    domUtils.un(iframe, 'load', callback);
}

图片上传成功后,直接将原来loading图的src修改成返回的链接,但是这样却没有出发angular的$apply,实际上应该说是没有出发changecontent,导致model没有被更新;

求问大神,如何让angular model 在修改img src属性时得到更新呢?
这问题困扰了很久了,之前看到博客有个大兄弟给changecontent里面加了个延迟

 _self.editor.addListener("contentChange", function() {  
    //此处设置一个延迟,防止图片还没有从服务器返回,从而获取到的是loading图片  
    setTimeout(function() {  
      ctrl.$setViewValue(_self.editor.getContent());  
      if (!_updateByRender) {  
        if (!$S.$$phase) {  
          $S.$apply();  
        }  
      }  
      _updateByRender = false;  
    }, 50)  
  });  

但是治标不治本,如果我的图片在50ms之后才载入,也是没有用的。。。。
找不到contentchange的事件代码。

我想大声告诉你
我想大声告诉你

모든 응답(1)
小葫芦

직접 돌아가기
방법 1: 구성에서 단일 이미지 업로드를 취소하고 대신 여러 이미지 업로드 사용
방법 2: ueditor.all.js에서 단순 업로드 기능 수정
이미지 업로드가 완료된 후 로딩 이미지 수정 속성, 실제 그림을 표시한 후 끝에 빈 문자열을 삽입하여 $apply

를 시작합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿