用于嵌套在指令中的ng-repeat的预定义函数

时间:2015-02-18 21:24:30

标签: angularjs angularjs-directive angular-ui-router

我有一个list指令,它基本上从服务中获取所有项目并在表格中显示它们。当我点击表格中的某个项目时,它会打开一个与项目类型相关的表格。

一切都很好,但是现在,我有一个该列表的实例,当我点击一个项目时我需要覆盖该事件。所以我在指令中添加了一个属性:

<list factory-name="Workers"
      on-item-click="$state.go('worker.workerDetails', {workerId: item._id})">
</list>

所以当我点击一个项目时调用的函数时,我可以做类似的事情:

<tr ng-repeat="item in items" ng-click="edit(item)></tr>

$scope.edit = function(item) {
  if ($attrs.onItemClick) {
    setTimeout(function(){ $scope.$apply($attrs.onItemClick); });
  } else {
    edit(item);
  }
};

问题是我无法隔离范围,因为一些嵌套指令需要访问它,我宁愿不用一堆异常修改我的list指令,只有一个覆盖函数(onItemClick);

现在它不起作用,状态护理不会被分配。

非常感谢

1 个答案:

答案 0 :(得分:0)

如果您无法隔离范围并使用“&amp;” bingind,你应该使用$ parser服务。

第一个解析属性:

var onItemClick = $parse($attrs.onItemClick);

然后这样称呼:

onItemClick($scope, { item: item });

您将上下文范围作为第一个参数传递,将包含本地(每个调用)变量的对象作为第二个参数传递。

不要对外部范围进行规范,可以使用“子范围”,在指令定义中指定scope: true