我假設你想要將模型中的HTML文本綁定到元素。我使用ng-bind-html來渲染模型中的內容,並創建了指令ck-inline來添加內聯功能並將模型綁定到內聯編輯器中發生的更改。這個指令需要一個ng-bind-html的工作,你還需要ngSanitize添加到你的模塊。添加指令ck內聯到你的元素和
我也使用$超時,因爲我注意到,如果我沒有呈現文本,然後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);
});
}
};
}]);
我不知道我是否完全理解你正在嘗試做什麼。但是如果意圖將javascript(angular)綁定到內聯所見即所得編輯器,那麼這可能是一個糟糕的主意,因爲您將網站置於XSS和CSRF攻擊之下。但是,再次,也許我不理解... –
感謝您的評論,你是正確的;我希望將角度綁定到內聯所見即所得的編輯器。然而,編輯的目的是提供一個實時可編輯的結構化報告(基本上是一個郵件合併)。即我們不打算將編輯器的結果寫回數據庫,它只會用於用戶會話,然後他們將打印編輯後的文檔。 – Geoff