在angularJS中调用ui-sref中的方法

时间:2016-06-29 10:58:48

标签: angularjs ui-sref

我在ngGrid中有以下代码:

cellTemplate: '<div class="padding-t-5 padding-l-5"><a ui-sref="editCamera({id:row.entity.id})" ><i class="fa fa-edit margin-r-10"></i></a>\n\
                    <button ng-click="confirmClick() && grid.appScope.deleteRow(row)" confirm-click><i class="fa fa-trash"></i></button></div>'

我想知道如何将ui-sref中提到的editCamera方法定义到控制器中。

如果我添加ng-click,那么我将如何传递id(传递给ui-sref)

我尝试使用$ scope.editCamera定义,但dint工作。

**** ****** UPDATE

我需要的是在同一控制器中执行添加和编辑操作,为此我需要一种不同的编辑操作方法。

3 个答案:

答案 0 :(得分:3)

ui-sref会将editCamera()视为角度路由的状态,因为编译后它会转换为ng-href。因此,如果您在控制器中定义editCamera(),它将不会被调用为其路由状态,并且params传入其中,即ID将充当routes参数。要调用函数,您需要使用ng-click。

或者如果您使用路由而不是使用params ID创建editCamera并使用ui-sref。

答案 1 :(得分:2)

使用ng-click代替ui-sref

HTML

<div class="padding-t-5 padding-l-5">
  <a ng-click="editCamera(row.entity.id)">
    <i class="fa fa-edit margin-r-10"></i>
  </a>
  <button ng-click="confirmClick() && grid.appScope.deleteRow(row)" confirm-click>
    <i class="fa fa-trash"></i>
  </button>
</div>

JS

$scope.editCamera = function(id) {
  $state.go('INSERT-EDIT-CAMERA-STATE-NAME-HERE', {id: id});
}

最后的注意事项 - 从语义上讲,现在我们已经杀死了ui-sref,而ui-sref又会杀死它产生的href,将元素更改为按钮或其他东西而不是锚标记会更好。但是我把语义留给你了。

答案 2 :(得分:0)

ui-sref是UI-Router使用的状态引用。这不是调用控制器方法,而是用于路由到另一个页面。