Angularjs 我可以做一个角度指令来匹配CSS选择器(不仅仅是标签名)吗?

Angularjs 我可以做一个角度指令来匹配CSS选择器(不仅仅是标签名)吗?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我可以定义一个影响文档中所有元素的指令,如下所示: myApp.directive('a', function() { return { restrict: 'E', link: function(scope, element) { // Some custom logic to apply to all <a> elements } }; }); myApp.directive('a',function(){ 返回{ 限制:'E', 链

我可以定义一个影响文档中所有
元素的指令,如下所示:

myApp.directive('a', function() {
  return {
    restrict: 'E',
    link: function(scope, element) {
      // Some custom logic to apply to all <a> elements
    }
  };
});
myApp.directive('a',function(){
返回{
限制:'E',
链接:功能(范围、元素){
//要应用于所有元素的一些自定义逻辑
}
};
});
除了与给定CSS选择器匹配的元素之外,我可以做同样的事情吗?像这样

myApp.directive('a[href^="mailto:"]', function() {
  return {
    restrict: 'E',
    link: function(scope, element) {
      // Some custom logic to apply to all <a> elements
      // w/ a href attribute starting in "mailto:"
    }
  };
});
myApp.directive('a[href^=“mailto:”),function(){
返回{
限制:'E',
链接:功能(范围、元素){
//要应用于所有元素的一些自定义逻辑
//w/a href属性以“mailto:”开头
}
};
});

在特定名称下注册指令时,angular会以新名称将指令放入指令缓存,或将其推送到指定名称下已存在的指令列表中

之后,angular在dom中搜索,以查找您的指令和(标记名| attrName | className | commentName)之间的对应关系,找到后,angular调用列表中每个指令的编译函数,并将找到的(元素,attrs)作为参数传递给编译函数

因此,在您的案例中,
a[href^=“mailto:”]
将按原样进行搜索,这显然是不存在的,属性、类和注释也是如此

在您的情况下,最明智的解决方案是:

myApp.directive('a', function() {
  return {
    restrict: 'E',
    link: function(scope, element, attrs) {
        if (attrs.href.indexOf('mailto:') !== 0) { return; }
        // Some custom logic to apply to all a[href^="mailto:"] elements
    }
  };
});

我意识到,如果答案是“否”,那么有一个明确的解决办法:只需检查
链接
函数中的元素,如果它与我正在寻找的任何选择器不匹配,就退出。问题依然存在!我担心答案是否定的,你将不得不利用这一方法。你可能想在Angular的github上发布一些东西作为功能请求。我也怀疑这是一个否。但是,如果可能的话,我将做的工作会有所不同。我不会在“a”上使用元素指令,而是在自定义“my href”属性上使用属性指令。如果由于某种原因无法更改模板,也可以使用属性指令
href