【问题标题】:AngularJS - Make a directive "scope-sensitive"AngularJS - 使指令“范围敏感”
【发布时间】:2013-07-09 15:18:38
【问题描述】:

我有一个页面,上面有 2 个容器,每个容器都包含图像。我想为这些图像添加一些特定的视觉属性和功能。这些特定的东西在两个存储库中是相似的,但并不相同。所以我想为 2 种类型的图像创建 one 指令,但我希望它的行为有所不同,具体取决于放置的存储库(实际上是范围)图像。检查指令正文中元素的范围:

studio.directive('orientable', function () {
    return {
        link: function(scope, element, attrs) {
              if(scope.id=="Depository1"){ 
              // give to element some specific behaviour
              }else if(scope.id=="Depository2"){ 
              // give to element another specific behaviour
              }
    }    
}

在我看来很难看。
我不能使用将参数传递给指令,因为那样图像的标签将变得不可读,并且当有很多图像时,它将是灾难。我不想要两个指令,因为它们基本相同。
所以我想要一个指令,但不知何故它必须是“多态的”。 这里有可能继承某种继承吗?我认为我在理解 Angular 指令方面遗漏了一些重要的东西。

【问题讨论】:

  • 为什么不能作为参数传递给指令的属性? stackoverflow.com/questions/13725938/… 在任何情况下,你的指令都应该有scope:true。否则,两个orientable 将共享内容
  • @EduardGamonal 那么我的 html 代码会太干,我认为它对性能也不利

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

如果您希望单个指令根据范围表现不同,那么检查某些范围属性对我来说似乎是完全合理的。

我认为在 Angular 中最接近多态性的方法是将共享的东西(数据、函数等)放入服务中,然后将该服务注入到您想要多态性的地方(指令、控制器、其他服务等) .).

【讨论】:

  • 哦,我想我明白了。我需要检查一些全局属性的范围,例如“isDragEnabled”而不是范围的“id”,所以指令将保持更通用而不是特定于大小写,对吧?
  • @Cherniv,是的,检查范围内对指令有意义的某些属性。
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多