【问题标题】:Angularjs How to pass parameter back to controller from directive with ng-clickAngularjs如何使用ng-click将参数从指令传递回控制器
【发布时间】:2013-10-20 22:55:25
【问题描述】:

我有一个处理 cmets 进程的指令。我将它绑定到一个父Controller,如下:

<div commentable signin="signIn()"</div>

在评论模板中,我有多个登录提供程序按钮;因此我需要将提供者传递回父控制器。但是这样做会让我不确定。

这是指令中的按钮:

<button type="button" ng-click="signin('app')">Sign In</button>

这是控制器功能:

$scope.signIn = function (provider) {
     console.log('clicked signin ' + provider);         
}

如何将ng-click中的provider字符串绑定到函数中Ctrl的provider?

【问题讨论】:

  • 认为您可能正在隔离范围内为指令寻找“=”,例如 scope: {signIn:"="} 所以传入的函数被调用......虽然不确定显示指令可能会有所帮助。

标签: angularjs


【解决方案1】:

你所拥有的应该可以工作。确保 signIn() 在您的控制器中声明。因此:

 function YourController($scope) {  
     $scope.signIn = function (provider) {
        console.log('clicked signin ' + provider);         
 }}

假设您的按钮位于控制器中:

 <div ng-controller="YourController">    
     <button type="button" ng-click="signIn('test')">Sign In</button>
 </div>

这是这个工作的一个小提琴:http://jsfiddle.net/tAsgt/

【讨论】:

  • 这很奇怪。我在控制台中得到以下信息:单击未定义的登录。所以两者是连线的,但由于某种原因,提供者“测试”没有从按钮传递到控制器。
  • 实际上它显示在控制台中:单击登录提供程序。哼。
  • 奇数。我刚刚更新了那个小提琴,所以它有两个按钮,点击的结果显示在“结果:”旁边。看看这些按钮是否适合您。
  • 是的,jsfiddle 有效。但是,请记住我首先通过指令传递它。我认为问题出在我传递 signin="signIn()" 的指令中。顺便说一句,我在 signin="signIn('provider')";删除它,它又重新显示未定义。
  • 你能模拟一个小提琴来展示你是如何设置它的吗?用指令?这样我们就可以确保我们都在同一个页面上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多