有关此问题的改进解决方案,请参阅问题底部
我已经尝试了一段时间,以获取有关pagedown工作的指令。这是stackoverflow使用的完全相同的编辑器。Stackoverflow使此代码在此处可用:
https://code.google.com/p/pagedown/
互联网上有一些版本,但都无法正常运行。我需要的是一个将与所有编辑器按钮一起出现的控件,就像在内联编码以及作为ngRepeat的一部分内联编码时一样,都将与stackoverflow一起出现。
我想使此指令在内联并且使用Angular版本1.2.7在ng- repeat中进行编码时起作用。所需要的是,当模型数据发生更改时,指令需要更新Pagedown视图以显示新的问题和答案。当用户更改分页向下编辑区域时,指令需要能够更新模型。当用户单击[保存]时,需要将模型数据保存到数据库(或至少保存到另一个对象以确认其有效)。
该指令需要能够响应模型中的更改,并且还可以在键入命令时或在编辑窗格中按下“更改”按钮时将其原始数据保存到模型中。这是我到目前为止所拥有的。请注意,此版本没有$ wmdInput.on(’change’,但它是所需内容的开始。
最重要的是,我想在Angular的 1.2.7 版本和jQuery 2.0.3中使用它。 请注意,我发现在1.2.2和1.2.7版本之间,我的非工作代码有所不同。我认为最好为最新(1.2.7)版本提供解决方案。
更新资料
现在,我简化了该指令,并解决了我最近因内容未显示而遇到的一些问题。我强烈建议使用此指令,该指令基于已接受的答案以及一些改进:https : //github.com/kennyki/angular- pagedown
这是一个工作链接:
http://cssdeck.com/labs/qebukp9k
var app = angular.module('App', []); app.directive('pagedownAdmin', function ($compile, $timeout) { var nextId = 0; var converter = Markdown.getSanitizingConverter(); converter.hooks.chain("preBlockGamut", function (text, rbg) { return text.replace(/^ {0,3}""" *\n((?:.*?\n)+?) {0,3}""" *$/gm, function (whole, inner) { return "<blockquote>" + rbg(inner) + "</blockquote>\n"; }); }); return { require: 'ngModel', replace: true, template: '<div class="pagedown-bootstrap-editor"></div>', link: function (scope, iElement, attrs, ngModel) { var editorUniqueId; if (attrs.id == null) { editorUniqueId = nextId++; } else { editorUniqueId = attrs.id; } var newElement = $compile( '<div>' + '<div class="wmd-panel">' + '<div id="wmd-button-bar-' + editorUniqueId + '"></div>' + '<textarea class="wmd-input" id="wmd-input-' + editorUniqueId + '">' + '</textarea>' + '</div>' + '<div id="wmd-preview-' + editorUniqueId + '" class="pagedown-preview wmd-panel wmd-preview"></div>' + '</div>')(scope); iElement.html(newElement); var help = function () { alert("There is no help"); } var editor = new Markdown.Editor(converter, "-" + editorUniqueId, { handler: help }); var $wmdInput = iElement.find('#wmd-input-' + editorUniqueId); var init = false; editor.hooks.chain("onPreviewRefresh", function () { var val = $wmdInput.val(); if (init && val !== ngModel.$modelValue ) { $timeout(function(){ scope.$apply(function(){ ngModel.$setViewValue(val); ngModel.$render(); }); }); } }); ngModel.$formatters.push(function(value){ init = true; $wmdInput.val(value); editor.refreshPreview(); return value; }); editor.run(); } } });