Javascript 角度指令-如何使用ng模型设置双向绑定

Javascript 角度指令-如何使用ng模型设置双向绑定,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我为redactor(所见即所得编辑器)编写了一个指令。它的工作后,一些黑客,但我想找到正确的方式。我面临的主要挑战是ng模型和redactor jquery插件之间的双向绑定。我从wysiwyg编辑器中监听keyup和command事件,并更新模型。我还关注来自redactor编辑器外部的模型更改,以便可以相应地更新redactor编辑器。棘手的部分是:如何忽略reactor编辑器施加的ng模型更改(从绑定的前半部分开始) 在下面的代码中,它会记住redactor编辑器更新到模型的最后一个值,

我为redactor(所见即所得编辑器)编写了一个指令。它的工作后,一些黑客,但我想找到正确的方式。我面临的主要挑战是ng模型和redactor jquery插件之间的双向绑定。我从wysiwyg编辑器中监听keyup和command事件,并更新模型。我还关注来自redactor编辑器外部的模型更改,以便可以相应地更新redactor编辑器。棘手的部分是:如何忽略reactor编辑器施加的ng模型更改(从绑定的前半部分开始)

在下面的代码中,它会记住redactor编辑器更新到模型的最后一个值,如果模型的新值等于最后一个值,则忽略模型更改。我真的不确定这是否是实现这一目标的正确方法。在我看来,这是双向绑定在角度上的常见问题,必须有一种正确的方式。谢谢

<textarea ui-redactor='{minHeight: 500}' ng-model='content'></textarea>

Mark Rajcok给出了解决方案(谢谢!)诀窍是使用ngModel.$render()而不是$watch()

使用

而不是

scope.$watch attrs.ngModel, (newVal) ->
  if redactor? and updatedVal isnt newVal
    redactor.setCode(ngModel.$viewValue or '')
    updatedVal = newVal

您是否尝试过实现ngModel而不是$watch()。$render()?似乎只有在Angular中的某些内容更改模型时才会调用$render()。在本例中,仅当我单击链接(以编程方式更改模型)时才会调用$render()。(因为我没有redactor许可证,所以我不能测试这个。)马克,这对我有用。非常感谢你!很好,很高兴它成功了,谢谢你让我们知道。我使用这个指令,对绑定很有效,除了一个问题。最后一次更改(无论是按键/粘贴还是其他更改)在另一次按键之前不会被绑定。所以它总是落后一步。(所有回调都正确执行)是的,这不再有效。在模板中定义的fiddle不工作模型不使用此指令更新?你知道为什么吗?
ngModel.$render = ->
  redactor?.setCode(ngModel.$viewValue or '')
scope.$watch attrs.ngModel, (newVal) ->
  if redactor? and updatedVal isnt newVal
    redactor.setCode(ngModel.$viewValue or '')
    updatedVal = newVal