此问题发生在IE和Firefox中,而不是Chrome。
In this plunk我有一个包含div的模板的指令。 div显示为ng-show="show"
,当show
中的指令初始化时,变量link.pre
设置为false。
我添加了一个警告,在变量show
初始化为false后立即停止该过程,但无论如何都会显示模板。
如果ng-show
设置为false,为什么会显示div?我需要模板在初始化时不显示,只有在我设置scope.show=true
时才会显示。
模板:
<div ng-show="show">
This shouldn't be shown
</div>
使用Javascript:
angular.module('app', []);
angular.module('app')
.directive('dir1', function() {
var directive = {};
directive.restrict = 'AE';
directive.scope = true;
directive.templateUrl = "template.html";
directive.link = {};
directive.link.pre = function(scope, element, attrs) {
scope.show = false;
alert(1);
}
directive.link.post = function(scope, element, attrs) {
};
return directive;
});
答案 0 :(得分:1)
也许不是您正在寻找的解决方案,但您始终可以将ng-show
替换为ng-if
。然后在post块中将scope.show
设置为true。没有必要使用false值初始化它,因为默认情况下它是假的。
答案 1 :(得分:0)
似乎&#34;棱角分明&#34;在显示模板之前,我们还没有真正编译过您的模板。我尝试添加ng-cloak
,但它似乎也没有用,所以我想你可以使用这个解决方法:
<div ng-show="show" class="ng-hide">
This shouldn't be shown
</div>
这样,您可以强制默认隐藏指令。如果你添加:
scope.show = true;
在alert
之后,它可以正常工作。
在接受此答案之前,请等待,看看是否有更好的答案。
答案 2 :(得分:0)
我没有足够的回复评论但是要添加到ssougnez的答案,你需要在链接函数中编译元素。我有一个类似的问题,在我的指令范围内的任何函数调用都不起作用。试试这个:
directive.link.pre = function(scope, element, attrs) {
scope.show = false;
alert(1);
$compile(element)(scope);
}
不要忘记为我的问题所在的$ compile注入依赖项。