我有一个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);
现在它不起作用,状态护理不会被分配。
非常感谢
答案 0 :(得分:0)
如果您无法隔离范围并使用“&amp;” bingind,你应该使用$ parser服务。
第一个解析属性:
var onItemClick = $parse($attrs.onItemClick);
然后这样称呼:
onItemClick($scope, { item: item });
您将上下文范围作为第一个参数传递,将包含本地(每个调用)变量的对象作为第二个参数传递。
不要对外部范围进行规范,可以使用“子范围”,在指令定义中指定scope: true
。