我試圖使用mark.js來突出顯示由Angular呈現的元素中的文本。角度視圖在文本更新後失去約束力
我碰到的問題是呈現的文本被mark.js更新,而Angular失去了對更新文本的引用。示例中顯示了principes。
小例子:plnkr.co
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
</head>
<body ng-init="count=0">
<p id="targetElement">Count: {{count}}</p>
<p>
<button ng-click="count = count + 1">Increase</button>
<button onclick="targetElement.innerHTML='broken';">Break it</button>
</p>
</body>
</html>
是否有可能觸發文本節點外部更新後重繪?
更新:
爲了更清楚的用例是什麼:
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.10.0/mark.js"></script>
</head>
<body ng-init="count=0">
<p id="targetElement">{{count}}</p>
<p>
<button ng-click="count = count + 1">Increase</button>
<button onclick="markInstance.markRegExp(/\d/);">Mark</button>
<button onclick="markInstance.unmark();">Unmark</button>
</p>
<script>
markInstance = new Mark(targetElement);
</script>
</body>
</html>
當你標記&取消標記裏面的文字<p id="targetElement">
節點正在更換由mark.js編輯Angular將不會再次顯示視圖。 (它確實更新DOM不再引用的文本節點)
綁定概念背後的規則是,您不應該像您在本示例中那樣自行更改html。如果您需要更改「targetElement」的html,則不要綁定任何chiled html。使用一些變量創建它。 –
你剛剛刪除了具有綁定的html。你能準確地告訴你爲什麼改變這個孩子的HTML嗎?因爲這不是你的實際代碼。 –
我已更新問題以更好地解釋情況。就像我說的那樣,mark.js是一個問題。它取代了Angular呈現的文本節點。 Angular沒有注意到這一點,並且仍然更新被替換並不再在DOM中的文本節點。 –