Angularjs 从指令添加ng show而不直接编译或使用模板
给定的HTML格式为Angularjs 从指令添加ng show而不直接编译或使用模板,angularjs,Angularjs,给定的HTML格式为 {{{item.Description}} 我想从我的指令中动态添加ng show。看来这并不像可能的那么容易。如果my directive是一个元素而不是一个属性,那么它可以通过一个模板来完成,但是遗憾的是,对于属性不存在相同的支持 我的第一次尝试使用了$compile服务,如中所述。但是,该方法依赖于指令的优先级高于任何其他指令,因此在ng repeat之前应用 我目前的方法是手动复制ng show的源代码: .directive('myDirective', ['$a
{{{item.Description}}
我想从我的指令
中动态添加ng show
。看来这并不像可能的那么容易。如果my directive
是一个元素而不是一个属性,那么它可以通过一个模板来完成,但是遗憾的是,对于属性不存在相同的支持
我的第一次尝试使用了$compile
服务,如中所述。但是,该方法依赖于指令的优先级高于任何其他指令,因此在ng repeat
之前应用
我目前的方法是手动复制ng show
的源代码:
.directive('myDirective', ['$animate', function ($animate) {
function toBoolean(value) {
if (typeof value === 'function') {
value = true;
} else if (value && value.length !== 0) {
var v = angular.lowercase("" + value);
value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
} else {
value = false;
}
return value;
}
return {
scope: true,
link: function(scope, elem, attrs) {
scope.$watch("myWatchExpression",
function(isActive) {
$animate[toBoolean(isActive) ? 'removeClass' : 'addClass'](elem, 'ng-hide');
}
);
}
};
}])
然而,这显然不是一个好的长期解决方案,因为它需要在内部角度发生变化时更新自定义指令
是否有任何方法可以请求作为可注入指令的指令并将其应用于元素(而不中断更高优先级的指令,如ng repeat
)
编辑以提供上下文
我试图创建的指令是针对选项卡式项目的。理想情况下,标记如下所示:
<tab-container>
<button ng-repeat="tab in tabs" tab-button="{{tab.id}}">{{tab.name}}</button>
<div ng-repeat="tab in tabs" tab-view="{{tab.id}}"><ng-include src="{{tab.template}}"/></div>
</tab-container>
{{tab.name}
因此,我希望
ng单击选项卡按钮上的和ng类
指令,以及选项卡视图上的ng显示
,我认为您不需要做您正在做的事情。为什么不能始终添加ng show
指令,并使用相同的逻辑控制它为真/假。或者在ng repeat上使用一个过滤器,这样它甚至不会显示。我无法确切地告诉您何时需要动态添加ng show以及它将具有什么价值,但如果您告诉我们您希望它如何工作,那么我们可以建议alternative@JoseM我编辑了这个问题,给出了上下文,就像Jose说的,听起来你应该在每个元素上设置ngShow
,并控制其表达式的值。当然,我可以,但我在这里创建了一个抽象。我觉得AngularV1中的指令基本上是不可组合的,这是一种耻辱——我希望他们能正确地理解它v2@AlexG当前位置我真的不明白你所说的“可组合”是什么意思。但是想要在不编译的情况下使用指令(即通过一个称为编译的过程增强HTML功能的东西),就像说“我希望一个函数在不被调用的情况下执行-我希望他们能够修复JS soit”(imo)。。。