Angularjs 带有ng元数据的指令,获取;html";来自指令中的元素

Angularjs 带有ng元数据的指令,获取;html";来自指令中的元素,angularjs,Angularjs,我正试图使用@directive语法将一个指令转换为ng metadata,但我很难找到一个特定的片段。该指令调用element.html(),但我似乎无法确定新指令中的位置 这是指令 angular.module('ngContenteditable', ['ngSanitize']). directive('contenteditable', ['$sce','$sanitize', function($sce, $sanitize) { return {

我正试图使用
@directive
语法将一个指令转换为
ng metadata
,但我很难找到一个特定的片段。该指令调用
element.html()
,但我似乎无法确定新指令中的位置

这是指令

angular.module('ngContenteditable', ['ngSanitize']).
    directive('contenteditable', ['$sce','$sanitize', function($sce, $sanitize) {
        return {
            restrict: 'A',
            require: '?ngModel',
            link: function(scope, element, attrs, ngModel) {
                if (!ngModel) return; 

                ngModel.$render = function () {
                    element.html($sanitize(ngModel.$viewValue || ''));
                };

                element.on('blur keyup change', function () {
                    scope.$apply(readViewText);
                });

                function readViewText() {
                    var html = element.html();
                    if (attrs.stripBr && html == '<br>') {
                        html = '';
                    }
                    ngModel.$setViewValue(html);
                }
            }
        };
}]);

ng元数据
@指令
@组件
的类实际上是一个控制器类。指令控制器具有本地依赖性-
$scope
$element


$element
应作为任何其他依赖项注入构造函数中,并像
$element.html()

一样使用ng元数据的类
@Directive
@Component
实际上是一个控制器类。指令控制器具有本地依赖性-
$scope
$element


$element
应该作为任何其他依赖项注入构造函数,并像
$element.html()

一样使用,它可能应该是$element service和$element.html()。它不是特定于ng元数据的。这就是代码从链接函数移到控制器再移回控制器时的处理方式。但是
$element
从何而来?依赖注入。非常感谢你!哇,这更有道理。我一直认为这是事件参数的一部分。我从来没有想到这可能也是一种依赖!!我很快会尝试一下,然后再给你回复,但是你能不能把这个作为官方答案发布,这样我就可以相信了?当然。您可能会注意到,
链接
在A1.5中不再受欢迎。我建议仔细看看A1.5(没有ng元数据)和A2中基于ES6/TS类的开发(我想您正在使用ng元数据以简化迁移)。ng元数据处理事情的方式将更有意义,它只是尝试用A1.5提供的以控制器为中心的方法模拟A2 API。它可能应该是$element service和$element.html()。它不是特定于ng元数据的。这就是代码从链接函数移到控制器再移回控制器时的处理方式。但是
$element
从何而来?依赖注入。非常感谢你!哇,这更有道理。我一直认为这是事件参数的一部分。我从来没有想到这可能也是一种依赖!!我很快会尝试一下,然后再给你回复,但是你能不能把这个作为官方答案发布,这样我就可以相信了?当然。您可能会注意到,
链接
在A1.5中不再受欢迎。我建议仔细看看A1.5(没有ng元数据)和A2中基于ES6/TS类的开发(我想您正在使用ng元数据以简化迁移)。ng元数据处理事情的方式将更有意义,它只是尝试用A1.5提供的以控制器为中心的方法模拟A2 API。这非常有效。非常感谢你。我觉得自己像个白痴,但我是个有工作代码的白痴!这很有效。非常感谢你。我觉得自己像个白痴,但我是个有工作代码的白痴!
import { Directive, Inject, Self, Optional, Input, HostListener } from 'ng-metadata/core';

@Directive({
    selector: '[contenteditable]'
})
export class ngDirective {
    @Input() stripBr: string;
    constructor(
        @Inject('ngModel') @Self() @Optional() private ngModel: any,
        @Inject('$sce') private $sce: ng.ISCEService,
        @Inject('$sanitize') private $sanitize: ng.sanitize.ISanitizeService) {
    }

    @HostListener('blur keyup change')
    onNgChange() {

    }

    onReadViewText() {
        let html = this.html(); // ... how do I get the HTML?
    }
}