我希望创建一个 mardown 指令(限制 A),这将使我能够为 ng-view 使用相同的收件人。因此,我基本上只会在 View 中加载 .md 文件,并在每次 ng-view 更改时将我的函数应用于其内容。所以:
index.html
<div markdown ng-view></div>
有两个 View ,其中包含view1.md
#That should be h1
和view2.md
##That should be h2, no ?
我的实际代码是
'use strict';
angular.module('btford.markdown', []).
directive('markdown', function () {
var converter = new Showdown.converter();
return {
restrict: 'A',
link: function (scope, element, attrs) {
scope.$watch(element.html(), function(value) {
var htmlText = converter.makeHtml(element.html());
element.html(htmlText);
});
var htmlText = converter.makeHtml(element.text());
element.html(htmlText);
}
}
});
最佳答案
watch 的第一个参数可以是一个函数,返回任何你想要的值,包括你的 $element.html()。您甚至可以进行数据组合
$scope.$watch(
function() { return $element.attr("abc") + $scope.variable + someinternalvar; },
function(newVal, oldVal) { doTheStuff(); }
);
显然,您输入的数据越密集, watch 的速度就越慢。请谨慎使用。
--仅供引用
您应该清理观察者,创建一个数组并将 $scope.$watch 的结果推送到该数组中。然后在 $destroy 消息中删除它们。另请记住取消绑定(bind)事件,因为创建和销毁作用域时它们会导致最终的性能问题。
$document.bind('click', clickMe);
$(window).on("resize", winResize);
var watches = []
watches.push($scope.$watch("thing", function() { Thing(); }));
$scope.$on("$destroy", function () {
for (var i in watches) watches[i]();
$document.unbind('click', clickMe);
$(window).off("resize", winResize);
});
-- 编辑2016-07-14
只是补充一下,不需要清理范围观察者,因为它们已经在内部处理,但是 rootScope、父级等,您绝对应该清理。
关于javascript - 指令中的 AngularJS : Watch element. html(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590765/