モデル内の HTML テキストを要素にバインドしたいとします。ng-bind-html を使用してモデルの内容をレンダリングし、ディレクティブ ck-inline を作成してインライン機能を追加し、インライン エディターで発生する変更にモデルをバインドしました。このディレクティブが機能するには ng-bind-html が必要であり、モジュールに ngSanitize を追加する必要もあります。要素にディレクティブ ck-inline を追加し、
$timeout も使用します。そうしないと、テキストがレンダリングされ、ckeditor がモデルを台無しにするすべての値を何らかの形で削除することに気付いたからです (これは、非インライン オプションでは発生しません)。これがコードです。
yourModule.directive('ckInline', ['$sce', '$timeout', function($sce, $timeout){
return{
require : '?ngBindHtml',
scope:{value:"=ngBindHtml"},
link : function(scope, elm, attr, ngBindHtml)
{
$timeout(function()
{
var ck_inline;
elm.attr("contenteditable", "true");
CKEDITOR.disableAutoInline = true;
ck_inline = CKEDITOR.inline(elm[0]);
if (!attr.ngBindHtml)
return;
ck_inline.on('instanceReady', function()
{
ck_inline.setData(elm.html());
});
function updateHtml()
{
scope.$apply(function()
{
scope.value = $sce.trustAsHtml(ck_inline.getData());
});
}
ck_inline.on('blur', updateHtml);
ck_inline.on('dataReady', updateHtml);
});
}
};
}]);