无法将参数从指令传递给控制器​​功能

时间:2014-09-17 18:31:12

标签: angularjs

我可以从我的指令中调用该函数,但参数仍然作为未定义传递。

这里是指令

的一行
<input ng-click="delete(0)" type="submit" id="submit" value="Delete Feed" />

这是指令

<testdirective delete="deleteFeed()"></testdirective>

这是函数

 $scope.deleteFeed = function(x){
  console.log(x);
  $scope.tweets.splice(x, 1);
}

最后是指令本身

app.directive("testdirective", function() {
return {
  restrict: "E",
  templateUrl: 'app/main/tweetboard.html', 
  scope: {
    delete:'&'
  },

};

});

谢谢!

4 个答案:

答案 0 :(得分:3)

尝试以下两件事:

  1. 使用此替换指令: <testdirective delete="deleteFeed(feed)"></testdirective>

  2. 指令的指向行替换为 <input ng-click="delete({feed:0})" type="submit" id="submit" value="Delete Feed" />

  3. @绑定形式的要点是将创建一个函数包装器&amp;它将指向原始功能。 要使用参数调用原始函数,需要将对象传递给包装函数,对象的键是参数的名称。

    来自官方angular docs的示例:

      

    给定<widget my-attr="count = count + value">和小部件定义   范围:{ localFn:'&myAttr' },然后隔离范围属性localFn   将指向count = count + value的函数包装器   表达。通常,从隔离范围传递数据是合乎需要的   通过表达式到父作用域,这可以通过传递一个   将局部变量名称和值映射到表达式包装器fn中。   例如,如果表达式为increment(amount),那么我们就可以   通过将localFn调用为localFn({amount:22})

    来指定金额值

答案 1 :(得分:0)

尝试作为属性而不是范围

app.directive("testdirective", function() {
    return {
      restrict: "E",
      templateUrl: 'app/main/tweetboard.html', 
      link: function(scope, elem, attrs) { 
          if(attr.deleteFeed)
              scope.$apply(attr.deleteFeed);
      }
    };
});

HTML

<testdirective delete="deleteFeed()"></testdirective>

答案 2 :(得分:0)

以下是工作解决方案:

Plunkr

您忘记传入参数,因此始终未定义。

//代码在这里

var app  =angular.module('test', []);

app.controller('testController', function($scope){
  $scope.x = "test";
  $scope.deleteFeed = function(x){
    alert(x);
  }
})

app.directive("testdirective", function() {
return {
restrict: "E",
template: '<input ng-click="delete(x)" type="submit" id="submit" value="Delete Feed" />',
scope: {
    delete:'&'
}
  };
});

答案 3 :(得分:0)

将函数中的pa-ram从指令传递给父控制器是一种简单的方法:

在父视图中:

<div  menubar activatetab="cdCtrl.activateTab(id)"></div>  

指令:

<div ng-click="activatetab({id:10})>Click here...</div>  

在父控制器中:

$scope.activateTab(id) =function(){    
                alert(id);

}

希望它能为你效力!!