将一个类添加到元素时,我想向该元素添加另一个类。当一个类被删除时,我想删除一个元素。我基本上是将一些引导程序类映射到某些角度形式验证类,但是当从元素中添加/删除一个类时,我无法弄清楚如何触发我的代码(还要确保不要引起类更改的无限循环)
。
到目前为止,这是我的指令的内容:
.directive('mirrorValidationStates', ['$log', function($log) {
function link(scope,element,attrs) {
scope.$watch(element.hasClass('someClass'), function(val) {
var classMap = {
'popupOn': 'has-error',
'ng-valid': 'has-success'
};
for (var key in classMap) {
if (element.hasClass(key)) {
$log.info("setting class " + classMap[key]);
element.parent().addClass(classMap[key]);
} else {
$log.info("removing class " + classMap[key]);
element.parent().removeClass(classMap[key]);
}
}
});
}
return {
link: link
};
}]);
因此,基本上,当popupOn
添加到元素时,我想将has-error
bootstrap类添加到父元素。何时popupOn
删除,我想删除has- error
。
我想在Angular中实现这一目标而错过了什么?也许有ng-class的东西而不使用指令?
非常感谢!
作品在这里
您可能想尝试此构造以遵循类更改:
$scope.$watch(function() {return element.attr('class'); }, function(newValue){});
请注意,观看的添加/删除类见解将导致添加类的另外一个调用,而不会更改类属性值。
但是我认为更好的方法是使用ng-class。例如,在您想添加一个’popupOn’类的时刻,您要设置一些范围值($ scope.popup =
true),然后为父元素和子元素指定ng-class,如下所示:
<div ng-class={'has-error': (popup==true)}>
<div id="patient" ng-class={'popupOn': (popup==true)}>test</div>
<button ng-click="addClass()">addClass</button>
<button ng-click="removeClass()">removeClass</button>
</div>
当您想删除这些类时,只需将$ scope.popup值设置为false
用ng级提琴
问题内容: 我尝试创建一个指令,当输入字段标记为无效时,该指令应执行一些操作。对于此示例,假设我有一条指令检查输入是否为素数,并且我想创建一条指令,在无效时将一个类添加到元素: validate-prime使用ng-model上的解析器和格式化程序来更新模型的有效性。 现在,我希望invalid-add-class指令在模型无效时添加“错误”类,并在有效时将其删除。换句话说,它应该监视模型控制器的
问题内容: 我有这样的设置: 控制器广播事件 指令侦听,然后通过append将其写入DOM,并以此创建指定指令的新元素。 IE浏览器: Angular从未调用过指令 当我检查DOM(并调试)时,我看到Controller 和指令正在执行其工作,并且有新的元素。 什么不见了?动态创建这些元素后需要做什么来触发指令调用? 问题答案: 请参阅。您可以类似于以下方式使用此服务: 这将执行新元素的编译和
问题内容: 我有一个指令,可以在一个页面上多次使用。在此指令的模板中,我需要对输入元素使用ID,以便可以将Label“绑定”到它,如下所示: 现在的问题是,一旦多次包含我的指令,ID“ item1”就不再是唯一的,并且标签将无法正常工作(单击时应选中/取消选中该复选框)。 该问题如何解决?有没有一种方法可以为模板分配“名称空间”或“前缀”(例如asp.net使用ctl00 …- Prefix)?还
问题内容: 我正在为Angular开发基于UI和排版的指令。在这种情况下,该指令所应用的元素是未知的-从div,span,h1到h5的任何值。 使用模板的原因是我可以向其中添加指令(因此开发人员无需记住指令名称即可)。 我添加属性和重新编译元素的成功有限。但是,添加时没有成功。创建新元素并替换旧元素会带来集成问题(忽略元素上可能存在的其他指令和数据属性),复制这些属性并将其添加到新元素的效果很小。
我们还可以通过在侦听器中添加目标来响应外部事件,例如从 或 document。 对于一个指令,这个概念是相当简单的。 将您的指令属性放在哪个模板标记被认为是Host元素。如果我们像上面这样实现HighlightDirective: 在组件的上下文中,Host元素是您通过组件配置中的选择器字符串创建的标记。 对于上面示例中的,组件类的上下文中的Host元素将是<my-text-box>标记。
问题内容: 我正在尝试在指令中的元素上使用。我发现的所有示例似乎都在控制器上进行了设置… 我在表单验证上派了一个JS小提琴,并尝试了很多方法。任何见解将不胜感激:http : //jsfiddle.net/thomporter/pmKpG/2/ 在小提琴中,在控制器上调用: 我想做类似的事情: 这样我就可以执行以下操作: 问题答案: 我想通了…您必须在输入元素上有一个名称。添加名称后,错误会根据需