我的问题基本上是让编译器获得我在指令中添加的新属性。 我正在使用打字稿,我有类似的东西。
public class MyDirectiveScope: ng.IScope
{
foo: boolean;
}
public class MyDirective implements ng.IDirective
{
public restrict = 'A';
public scope = {
foo:'=',
};
public constructor (protected $log: ng.ILogService)
{
}
link = ($scope: MyDirectiveScope, element: JQuery, attributes: ng.IAttributes)
{
if(!$scope.foo)
angular.element(element).attr("ng-if","false");
}
}
我调用我的指令的元素获取我添加的新属性,但angular不评估这个新属性。如果我有一个<div>
元素,例如获得这个新属性,并且会像<div ng-if="false">,
那样我想要什么,将不会显示div内部。
我之前在angular.element(element).css(“display”,“none”)之前使用过,这样可行,但我真的希望div元素根本不在DOM中。
答案 0 :(得分:0)
应该避免动态设置指令属性,这肯定违背了最佳实践。您应该在模板中使用<div ng-if="checkCondition">
,并可以修改checkCondition
函数中的逻辑。即使存在一些可能的属性,您也应该将它们全部添加到元素中并将逻辑放在函数中。
如果必须使用此方法,则可以使用所需的属性销毁并重新创建指令,如下所示:
var element = $compile("<my-directive someAttribute=\"someval\"")($scope);
然后,您可以将element
附加到您认为合适的DOM中。