angularjs - 为什么 ng-style 不适用于与自定义指令相同的元素?

标签 angularjs angularjs-directive angularjs-scope

我正在尝试在自定义指令标签上应用 ng-style 属性,有点像这样:

<my-directive ng-style="myStyle"></my-directive>

在 Controller 内部,我有:
$scope.myStyle = {
    "background": "red"
}

这似乎不起作用。当我检查 HTML 'MyStyle' 时没有呈现。当我在常规 div 上应用相同的 ng 样式标签时,它会正确呈现。

为什么 ng-style 不适用于自定义指令标签?

最佳答案

您的指令可能定义了一个隔离范围:scope: { ... } .在这种情况下,在该元素上定义的所有指令都将使用隔离范围。因此,ng-style 会寻找属性 myStyle在不存在的隔离范围上。

enter image description here

上面,灰线显示 $parents,虚线显示原型(prototype)继承。
范围 004 是您的隔离范围。范围 003 是您的 Controller 范围。 ng-style 将查找 myStyle在Scope 004中,找不到它,那么它会沿着虚线在Scope中寻找它,也没有找到它。

通常,您不希望在同一元素上使用创建隔离范围的指令以及其他指令。你有几个选择:

  • 使用 scope: true而不是指令中的隔离范围。然后当 ng-style 寻找 myStyle在范围 004 中并没有找到它,它将沿着虚线(在下图中)并在父范围中找到它:enter image description here
  • 使用 ng-style="$parent.myStyle"在您的 HTML 中访问 myStyle父范围中的属性(即,按照第一张图片中的灰线)。
  • 关于angularjs - 为什么 ng-style 不适用于与自定义指令相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423955/

    相关文章:

    angularjs - 使用同一 Controller 在两个 div 之间共享数据

    javascript - 重复中的 Angular ng-transinclude 范围

    javascript - 如何使用组件路由 Angular 1.5 跨页面导航时保留值

    javascript - ionic 有标题+ ionic 侧菜单不起作用

    angularjs - Angular4只为一个组件添加js文件?

    javascript - Angular 属性指令 - 在当前指令下方添加 ng-repeat

    javascript - AngularJS自定义指令在继承父范围的同时访问模板中的属性

    javascript - 计算我的网页的点击次数

    angularjs - AngularJS 指令中没有值的属性

    javascript - 如何使用 Angular 表达式值作为 html 元素的属性