【发布时间】:2025-11-26 20:15:02
【问题描述】:
我正在为 Angular 开发基于 UI 和排版的指令。在这种情况下,应用指令的元素是未知的 - 从 div、span、h1 到 h5 的任何元素。
使用模板的原因是我可以在其中添加ng-* 指令(这样开发人员就不需要记住指令名称以外的任何内容)。
我在添加属性和重新编译元素方面的成功有限。但是,在添加 ng-transclude 时没有成功。创建新元素并替换旧元素会带来集成问题(忽略元素上可能存在的其他指令和数据属性),复制这些属性并将它们添加到新元素中几乎没有成功。
这看起来应该很简单,因为template 本身可以将元素更改为您指定的任何内容(使用transclude 和replace),肯定还有“很长的路要走”吗?
你不能做以下事情太糟糕了:
module.directive( 'myDir', [ '$window', function( $window ) {
return {
restrict: "A",
controller: function( $scope, $element ) {
$scope.tag = $element[0].nodeName;
}
template: "<{{tag}} data-ng-transclude ng-*=''></{{tag}}>",
transclude: true,
replace: true,
link: function ( scope, element, attrs ) {
}
}
}]);
我认为主要问题是我希望用模板替换和嵌入元素,而不是作为子元素添加模板(或编译元素)。
我已经在我的代码中用 vanilla JS 替换了对 ng-* 和模板的需求,例如:
<div data-ng-style="{'font-size':fontSize}></div>
与
element[0].style.fontSize = scope.fontSize;
这引出了使用多个ng-* 指令的好处的问题?它只是“Angular 方式”吗?
【问题讨论】:
标签: javascript angularjs angularjs-directive