angular.js - angular-ueditor使用中,插入圖片,載入完成後不更新angularmodel的問題;
我想大声告诉你
我想大声告诉你 2017-05-15 17:11:01
0
1
837

使用百度編輯器時,插入圖片初始為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)
小葫芦

自己回到吧;
方法一:在配置中config取消單張圖片上傳,使用多張圖片上傳代替;
方法二:修改ueditor.all.js中簡單上傳函數
在圖片上傳完成後修改loading圖的src屬性,展示真實圖片後,在末尾插入一個空字串來出發$apply;

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板