Angular $watch 事件未在 window.getSelection().anchorNode 发生变化时触发

Angular $watch event isn't firing on change in window.getSelection().anchorNode

我关注用户高亮文本的变化。我根据突出显示的 DOM 元素触发。我有以下功能:

$scope.$watch(function(scope) { return window.getSelection().anchorNode }, function() { console.log(window.getSelection().anchorNode; }

它只会在页面加载时触发一次,而不会再次触发,无论我突出显示的文本是什么。我突出显示各种跨度中的文本,页面上的文本区域,这不会触发。

如果我添加$ Interval函数无助,则该手表在间隔时间后选择时会发射。

有什么想法吗?

在您的实例中 $watch 将不起作用,因为没有更新 $scope 变量并且 $digest 循环将不会开始。

您可以尝试使用 ngMouseup 指令获取最后突出显示的文本并保存。

HTML:

<div ng-mouseup="updateHighlightedText()">lots of text</div>

JS:

$scope.updateHighlightedText = function () {
    $scope.highlightedText = window.getSelection().toString();
}

这是 jsfiddle

中的工作示例