【问题标题】:ng-attr interpolation not working with ng-repeatng-attr 插值不适用于 ng-repeat
【发布时间】:2019-10-07 21:01:44
【问题描述】:

如果在迭代创建选项卡的数据结构中设置了属性“权限”,我正在尝试生成可选具有名为“if-permission-keep”的属性的选项卡。下面是数据结构的样子:

  $scope.tabs = [
    {heading: "Details", 
     route:"facilities-view.details"
    },
    {heading: "Devices",
     route:"facilities-view.devices",
     style:"fas fa-fw fa-lg fa-mobile",
     permissions:"'mobile_device_manage'"
    },...
 ];

这是带有 AngularJS 指令的选项卡的 html:

<uib-tab ng-repeat="t in tabs" index="t.route" select="showTab(t.route)"
         ng-attr-if-permission-keep = "t.permissions">

我对 ng-attr 工作原理的理解是,如果表达式(在本例中为“t.permissions”)未定义,则该属性不会添加到元素中。否则,属性将与表达式的值一起添加。但似乎即使表达式的计算结果为未定义,它也会添加具有已定义值的属性。在 ng-repeated 元素中使用 ng-attr 有什么不同吗?

【问题讨论】:

    标签: angularjs data-binding interpolation


    【解决方案1】:

    表达式需要插值:

    <uib-tab ng-repeat="t in tabs" index="t.route" select="showTab(t.route)"
             ng-attr-if-permission-keep = "{{t.permissions}}">
    

    AngularJS Developer Guide - Interpolation - ngAttr for binding to arbitrary attributes

    【讨论】:

    • 根据文档,我最初尝试在表达式周围使用双括号,但出现以下错误:“Token '{' invalid key at column 2”。我以为我收到了这个错误,因为 $interpolate 方法在 ng-repeat 范围内以不同的方式解析它。请注意,其他 ng 指令的表达式不使用双括号,并且它们有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2018-11-05
    • 1970-01-01
    • 2016-10-20
    • 2018-07-29
    相关资源
    最近更新 更多