【问题标题】:Predefined function to use in ng-repeat nested in a directive嵌套在指令中的 ng-repeat 中使用的预定义函数
【发布时间】:2015-02-18 21:24:30
【问题描述】:

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

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

<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);
  }
};

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

现在它不起作用,状态参数没有被分配。

非常感谢

【问题讨论】:

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


    【解决方案1】:

    如果你不能隔离作用域并使用"&" bingind,你应该使用$parser服务。

    第一个解析属性:

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

    然后这样称呼它:

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

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

    为了不污染外部作用域,你可以使用“子作用域”,通过在指令定义中指定scope: true

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      相关资源
      最近更新 更多