我用Vojta's angularJS directive但有時ckeditor無法顯示服務中的數據。這幾乎從來沒有發生刷新,但往往導航回到頁面時發生。我能夠驗證$ render函數總是用正確的數據調用ck.setData,但有時它不會顯示。angularjs ckeditor指令有時無法加載服務中的數據
11
A
回答
11
看起來$ render方法有時在ckeditor準備好之前調用。我可以通過向instanceReady事件添加一個偵聽器來解決這個問題,以確保它在ckeditor準備好後至少被調用一次。
ck.on('instanceReady', function() {
ck.setData(ngModel.$viewValue);
});
爲了完整性,這裏是我使用的完整指令。
//Directive to work with the ckeditor
//See http://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', items : [] },
{ name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript' ] },
{ name: 'paragraph', items : [
'NumberedList','BulletedList','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },
{ name: 'links', items : [] },
{ name: 'insert', items : [ 'SpecialChar' ] },
'/',
{ name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
{ name: 'colors', items : [] },
{ 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);
};
}
};
});
3
function updateModel() {
scope.$apply(function() {
if (ck.getData().length) {
ngModel.$setViewValue(ck.getData());
}
});
}
看到全碼:
return {
require: '?ngModel',
scope: true,
link: function (scope, element, attr, ngModel) {
if (!ngModel) return;
var ck = CKEDITOR.replace(element[0]);
ck.on('instanceReady', function() {
ck.setData(ngModel.$viewValue);
});
function updateModel() {
scope.$apply(function() {
if (ck.getData().length) {
ngModel.$setViewValue(ck.getData());
}
});
}
ck.on('pasteState', updateModel);
ck.on('change', updateModel);
ck.on('key', updateModel);
ck.on('dataReady', updateModel);
ngModel.$render = function() {
ck.setData(ngModel.$modelValue);
};
}
}
0
我也滿足了這個問題 當我發現了一個新的指令。這對我來說很有效!!!
請試試這個:
return {
require: '?ngModel',
scope: true,
link: function (scope, element, attr, ngModel) {
if (!ngModel) return;
var ck = CKEDITOR.replace(element[0]);
ck.on('instanceReady', function() {
ck.setData(ngModel.$viewValue);
});
function updateModel() {
scope.$apply(function() {
if (ck.getData().length) {
ngModel.$setViewValue(ck.getData());
}
});
}
ck.on('pasteState', updateModel);
ck.on('change', updateModel);
ck.on('key', updateModel);
ck.on('dataReady', updateModel);
ngModel.$render = function() {
ck.setData(ngModel.$modelValue);
};
}
};
相關問題
- 1. AngularJS無法從服務加載數據
- 2. 從AngularJS指令加載遠程數據
- 3. AngularJS圖指令 - 異步服務中加載的數據不更新圖表
- 4. AngularJS從服務中加載數據
- 5. AngularJS指令加載
- 6. angularJS:無法加載自定義服務?
- 7. AngularJs從指令中的服務響應中操作數據
- 8. Angular指令無法加載
- 9. AngularJS:無法在指令控制器中解決服務問題
- 10. 是否有可能通過AngularJS在指令中加載指令?
- 11. AngularJS指令templateUrl無法加載到視圖中
- 12. 無法取得從控制器中的服務加載數據angularjs
- 13. Angularjs:指令加載順序
- 14. AngularJS在完成服務http調用之前加載指令
- 15. 在AngularJS中延遲加載數據的指令
- 16. 無法從指令angularjs中的Firebase中獲取數據
- 17. AngularJS指令在數據開始時無法識別 -
- 18. AngularJS指令和從服務中提取數據
- 19. 調用函數指令被加載angularjs
- 20. AngularJS:有沒有辦法知道何時加載了另一個指令中包含的指令?
- 21. AngularJS:在指令中使用服務
- 22. 無法建立AngularJS指令
- 23. Angularjs控制器無法加載來自cachefactory服務的http數據
- 24. Angularjs控制器,指令和服務之間的數據綁定
- 25. 從服務傳遞數據的指令在AngularJs
- 26. AngularJS服務返回預加載的數據或數據從$ html.get
- 27. 如何在angularjs中加載指令?
- 28. 指令無法從服務檢索數據
- 29. DevExtreme datasource無法加載數據服務數據
- 30. AngularJS不解析動態加載的數據從指令
此解決方案是否繼續爲您的網站工作?我試着讓它工作在幾種方式(包括你的方式),而且內容會間歇性地加載失敗。 – keepitreal 2014-02-21 22:52:59