我已经看到很多关于使用ng-attr和指令的问题,但我还没有看到这个具体案例正在实施。
我正在尝试通过属性指令动态地将加载叠加层添加到目标DOM元素中。这个想法是,凭借拥有属性指令的目标DOM元素,DOM将覆盖附加到其子节点。
我从各个方面接近这一点,没有运气。因为这将在我们可能想要阻止某些UI而不是使用模态完全阻止应用程序的许多地方使用,我希望保持我们的模板清洁并动态附加它。
我确实意识到这种方法可能存在问题,因为一旦删除了属性,指令中可能没有生命周期事件就知道它被命令自行删除。我不太了解指令,知道是否是这种情况。
答案 0 :(得分:2)
在考虑了这个问题后,我认为有一个更通用的指令与“静态”相结合。方法是最好的。
.directive('loadOverlay', function() {
return {
restrict: 'EA',
scope: true,
link: function(scope, element, attrs) {
var id = 'nx-load-overlay-' + parseInt(Math.random() * 1000);
function toggleOverlay(show) {
if (show === true) {
var d = '<div id="' + id + '" class="nx-load-overlay"><div class="nx-load-overlay-spinner"><span class="fa fa-cog fa-spin fa-3x"></span><br/><span style="font-weight:bold; font-size:larger;">loading</span></div></div>';
element.append(d)
} else {
$('#' + id).remove()
}
}
if (attrs.loadOverlay)
scope.$watch(attrs.loadOverlay, toggleOverlay);
else
toggleOverlay(true)
}
}
})