2016-03-02 171 views
1

我有一个简单的属性限制指令一样angularjs创建自定义事件指令

app.directive('akMouseOver', function() { 
return { 
    restrict: 'A', 
    scope: { 
     mouseOver: '&akMouseOver' 
    }, 
    controller: function ($scope) { 

    }, 
    link: function (scope, elem, attrs) { 
     elem.bind('mouseover', function() { 
      scope.mouseOver({ hValue: value }); 
     }); 
    } 
}}) 

,我在一个简单的HTML按钮调用作为

<button ak-mouse-over='btnMouseOver('Win Win')' class='btn btn-primary'> Hello There !</button> 

和我的父母控制方法

$scope.btnMouseOver = function (hValue) { 
    alert(hValue + 'Hello !!!'); 
} 

在这里,不知何故,我无法将参数传递给父方法。如果我在没有参数的情况下实现这个实现,那么它正在工作,如果我将鼠标悬停在按钮上,我会看到alert()

寻找传递(a)参数/ s而不添加额外的属性/指令/范围变量。

+0

我将解释单独! – Kenz

回答

1

在你的情况下,它应该工作&然后它会提醒Win Win Hello !!!因为你已经硬编码的功能级别的值,即使你通过指令值,它只会通过相同的。

当通过从指令值孤立范围的注册功能,你应该有btnMouseOver(hValue),因为当你调用指令mouseOver功能,基本上都会去呼吁ak-mouse-over属性注册btnMouseOver方法。

在通过值的你必须JSON一种像{hValue: value}格式,其中hValue将代表btnMouseOver函数的参数的通值到父控制器功能的时候,放置在其上要传递到一个ak-mouse-over然后value是值功能。

<button ak-mouse-over="btnMouseOver(hValue)"> 
    Hello There ! 
</button> 

你也需要调用scope.$apply()mouserover事件处理程序,以保持你正在运行的角度范围之外的事件消化周期。

Demo here

+0

因此,基本上,如果我们将直接字符串值传递给属性指令函数,则应该通过传递字符串值“myValue”调用'{jValue:'myValue'}'父函数。其他脚本将继续寻找'价值'(根据我的问题)。 – Kenz

+0

@Avinash no ..我编辑了我的答案..基本上,如果你写了'ak-mouse-over =“btnMouseOver(a)”',那么指令调用应该是'scope.mouseOver({a:value});'。理解?我们的'hValue'当前值是'hValue',因为在我的问题中存在属性函数参数 –

+0

我问'ak-mouse-over =“btnMouseOver('Win Win')”''so win'win'是字符串值,但是根据您更新的评论'hValue'是参数/变量名称(未引用)。所以角度会认为它('hValue')作为父控制器的范围变量。在问这个问题之前我测试了哪个。所以如果用字符串值调用父控制器函数,则指令的作用域函数/事件应该使用json'{jValue:'value'}''调用独立方法。 – Kenz