我用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