AngularJS-将条件传递到指令

AngularJS-将条件传递到指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个自定义指令——我们称之为tableDisplay。我希望能够基于属性显示/隐藏列(我们称之为“显示编辑列”,我正在使用该属性),但我还希望能够在每一行上确定给定行是否可编辑。我想通过传递另一个属性(allow edit row condition)来实现这一点,该属性告诉每行应该使用的条件语句来确定其是否可编辑 类似下面的内容 <table-display show-edit-column="true" allow-edit-row-condition="row.value ===

我有一个自定义指令——我们称之为tableDisplay。我希望能够基于属性显示/隐藏列(我们称之为“显示编辑列”,我正在使用该属性),但我还希望能够在每一行上确定给定行是否可编辑。我想通过传递另一个属性(allow edit row condition)来实现这一点,该属性告诉每行应该使用的条件语句来确定其是否可编辑

类似下面的内容

<table-display show-edit-column="true" allow-edit-row-condition="row.value === 'OK'">


我只是不知道如何传递row.value==='OK',这样就可以在每一行上使用了。有什么想法/建议吗?

我理解这个问题。您正在尝试传递条件的文本表达式,该表达式可以在内部
ng repeat
的上下文中进行计算。我可能会建议不要这样做,因为现在您的客户必须了解您的内部指令结构,因为
在父范围内没有意义(即对您指令的消费者而言)

但是如果你坚持

您需要在每行的上下文中插入此表达式。因此,将表达式解析为要在内部作用域上公开的函数。您可以在链接功能中执行此操作:

link: function(scope, elem, attrs){
  // get the condition as string
  var cond = attrs["condition"];

  // parse to create a function
  var matcher = $parse(cond);

  scope.matchRow = function(row){
    // evaluate the function in the context of the row
    return matcher({row: row});
  };
然后,在您看来,您可以根据以下条件进行筛选:

<tr ng-repeat="row in src | filter:matchRow">
  <td ng-repeat="col in row">{{col}}</td>
</tr>

{{col}}
或者,执行一些条件渲染(可编辑与不可编辑):


下面是一个例子来说明传递函数

在父范围上定义

$scope.isEditAllowedForRow = function (row) {
   return (row.value === 'OK');
};
声明为单向绑定的指令范围参数:

...
allowEditRowCondition: '&'
...
并将其用作

<table-display show-edit-column="true"
               allow-edit-row-condition="isEditAllowedForRow(row)">
e、 g



在Javascript中,请始终考虑函数。

如果行是使用ng repeat创建的,请将允许编辑行条件属性添加到每个重复元素中?问题是,允许编辑行条件可能会根据使用table display指令的页面而改变,因此需要对其进行自定义。什么是
row.value
是否定义在指令的父范围内?否-这就是问题所在。行在table display指令中定义。所以我要做的是将一个条件传递到指令中,在指令中进行评估。为什么不直接传递一个函数呢?现在指令要求使用在其内部运行的函数来污染作用域-这对我来说似乎不是最好的方法。Sulthan-谢谢!我现在就去试试。新开发的好处是,它现在只被我自己使用,最坏的情况是被其他同事使用。
<table-display show-edit-column="true"
               allow-edit-row-condition="isEditAllowedForRow(row)">
allowEditRowCondition({row: row})
<tr ng-show="allowEditRowCondition({row: row})">