javascript - 指令中的 AngularJS : Watch element. html()

标签 javascript angularjs markdown angularjs-directive

我希望创建一个 ma​​rdown 指令(限制 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/

相关文章:

javascript - 使用 Angular 为简单 slider 进行数据绑定(bind)

javascript - 如何将 Google map 导出为图像(包括自定义标记)?

github - 是否可以在要点中建立与 Markdown 文件中图像的相对链接?

javascript - JQuery .text() 无法使用 indexOf 查找空格

javascript - jQuery - 如何编写类来实现 OO 设计

angularjs - 在 Express 中将数据响应到 Slack url

markdown - 如何重用 API BluePrint 模式中的对象?

objective-c - 如何在 iOS/OS X 中将 HTML 转换为 Markdown?有什么方法可以在应用程序中使用 pandoc 吗?

javascript - 从 Shadow DOM 中获取 ElementById

javascript - 服务调用后 Angular 范围未更新