【发布时间】: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