AngularJs指令 - 在添加新的角度属性时重新渲染html

时间:2015-10-10 13:20:04

标签: angularjs html5 angularjs-directive typescript

我的问题基本上是让编译器获得我在指令中添加的新属性。 我正在使用打字稿,我有类似的东西。

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中。

1 个答案:

答案 0 :(得分:0)

应该避免动态设置指令属性,这肯定违背了最佳实践。您应该在模板中使用<div ng-if="checkCondition">,并可以修改checkCondition函数中的逻辑。即使存在一些可能的属性,您也应该将它们全部添加到元素中并将逻辑放在函数中。

如果必须使用此方法,则可以使用所需的属性销毁并重新创建指令,如下所示:

var element = $compile("<my-directive someAttribute=\"someval\"")($scope);

然后,您可以将element附加到您认为合适的DOM中。