2016-03-02 201 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