【问题标题】:AngularJS Attribute directive receives string at compile timeAngularJS Attribute 指令在编译时接收字符串
【发布时间】:2015-07-16 15:23:03
【问题描述】:

我有以下属性指令:

  (function() {
    'use strict';

    angular.module('IPSConsoleApp').directive('tabSwitch', function() {
        return {
            restrict: 'A',
            priority: 100000,
            scope: false,
            compile: function(element, attr) {
                if (attr.tabSwitch) {
                    element.children().remove();
                    element.remove();
                }
            }
        };
    });
})();

在我看来是这样使用的:

<personal-details account="account" tab-switch="viewdetails"></personal-details>

viewdetails 是一个布尔值,在单击另一个按钮时设置为 true 或 false。

我在这里尝试做的是一个指令,而不是 ng-if,它会在 viewdetails 为真时删除我的元素并且不会创建新的子范围。

但是,在调试时,这是我在attr.tabSwitch 中收到的:

“查看详情”

当然,我不想要实际的字符串。我想要实际的布尔值。这会发生吗?我一直在研究,找不到传递这个布尔值的方法。

非常感谢您的帮助!

编辑:虽然我仍然没有找到任何解决这个问题的方法,但我最终使用了链接函数并使用scope.$eval(attr.tabSwitch) 将字符串评估为相应的布尔值。这是为寻找类似功能的人准备的。

【问题讨论】:

  • 如果我理解了您的问题,那么这里有一个小提示。您可以使用 ng-click 在单击按钮时设置 viewdetails,并将 $scope.viewdetails 设置为控制器中所需的值。然后您可以在 tabSwitch 指令中访问相同的内容。不需要用指令传递它。
  • @Navaneeth 我不认为这很简单,不是来自compile 步骤。那时她无法访问任何$scope
  • 是的,这正是我要回复@DRobinson .. 在编译时我无法访问任何范围.. 根据文档,甚至不能作为参数:( 我看到了使用 $observe 的建议在链接函数中......但我需要在编译时删除元素并且 $observe 也在 $scope 上!
  • 我认为您可能不走运,避免使用超级黑客解决方法。出于好奇,为什么它需要在编译中?另外,为什么ngIf 被禁止(除了link 时间本身)。
  • 好吧,既然您使用的是scope: false,那么在链接函数中,您的scope 变量应该自动指向其父作用域。如果您确定父范围具有您所追求的值,您可以在链接函数中使用scope[attr.tabSwitch]。那应该可以。

标签: angularjs


【解决方案1】:

尝试使用{{}} 插入值

<personal-details account="account" tab-switch="{{viewdetails}}"></personal-details>

然后检查“真”或“假”。

【讨论】:

  • 我试过这个..字符串简单地变成“{{viewdetails}}”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2014-07-07
相关资源
最近更新 更多