2015-11-26 65 views
3

我有以下按鈕的HTML:模擬AngularJS NG-click事件

<button ng-click='showStats(player.data,0)'>Death Match</button> 
<button ng-click='showStats(player.data,1)'>Champions Rumble</button> 
<button ng-click='showStats(player.data,2)'>Full Profile</button> 

正如你可能已經猜到了,被點擊任何按鈕時,則對應玩家的統計顯示。這工作正常沒有問題。現在,該系統還有一個附加功能,玩家可以設置他的個人資料的哪一部分顯示爲默認值。

因此,當用戶訪問一個球員的個人資料,假設玩家設置了他的個人資料顯示偏好1 (Champions Rumble)。在這種情況下,我希望單擊中間按鈕上的按鈕進行模擬(僅在第一次加載頁面時),以顯示相應的配置文件部分。然後訪問者可以單擊任何按鈕,並且該配置文件的該部分將顯示,因爲它現在正在完成。

可以這樣做?我一直在努力幾個小時now.Any幫助非常感謝!

回答

2
$scope.showStats(data, defaultOption); // in your controller when user profile loaded 
+0

謝謝,這工作! –

-3

您可以通過使用jQuery模擬點擊事件。

$('#button2').click()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<button onclick=$('div').html('button1_click')>Button 1</button> 
 
<button onclick=$('div').html('button2_click') id=button2>Button 2</button> 
 
<button onclick=$('div').html('button3_click')>Button 3</button> 
 
<div></div>

在你的代碼,你可以做這樣的事情:

$('button:contains("Champions Rumble")').click() 
+0

當您可以直接調用該函數時,爲什麼要模擬點擊? –

+0

因爲問題是如何模擬點擊 – Aminadav

+0

問題是如何模擬點擊,如其他兩個回答所述,答案是您不需要模擬點擊。你的答案不是一個有效的解決方案,但你正在爭論ng-init的正確用法。爲了記錄,我不相信在ng-init上調用控制器上的函數是有問題的。這可以說是一個比直接在控制器中調用相同函數更好的解決方案,因爲您可能有另一個視圖與同一個控制器關聯,而無需在初始化時啓動統計信息。 –

0

ngClick指令允許你點擊一個元素時指定自定義行爲。通常,不是在屬性中編寫javascript表達式,而是將其包裝在控制器函數中。所以這是一種將用戶操作綁定到代碼級別的功能的實用方法。

但你已經在代碼級別,所以你不需要模擬用戶交互來調用一個函數。 只需調用函數直接。當您使用ngInit指令初始化您的控制器時,您可以調用任何函數。假設您的喜好存儲在$scope.preference財產和擁有的012可能值(對應於三個按鈕),所有你需要做的是將函數調用中的元素的ng-init屬性設置你的控制器,使用player.datapreference作爲屬性:

<div ng-controller='yourController' ng-init='showStats(player.data,preference)'> 
    <button ng-click='showStats(player.data,0)'>Death Match</button> 
    <button ng-click='showStats(player.data,1)'>Champions Rumble</button> 
    <button ng-click='showStats(player.data,2)'>Full Profile</button> 
</div> 

離開ngClick的點擊和使用ngInit進行初始化。但是,如果你沒有preference你什麼時候intialize控制器,你應該把呼叫showStats()在你已經把你的點擊模擬相同的地方。

+0

該文檔說不使用ngInit:該指令可能會被濫用,將不必要的邏輯添加到您的模板中。 ngInit只有少數適​​當的用法,例如用於重寫ngRepeat的特殊屬性,如下面的演示所示;並通過服務器端腳本注入數據。除了這幾種情況之外,您應該使用控制器而不是ngInit來初始化作用域上的值。 https://docs.angularjs.org/api/ng/directive/ngInit – Aminadav

+0

@Amina你真的相信正確的方式去創建一個子控制器,我應該從父控制器調用該函數嗎?我的意思是,真的嗎? –

+0

我不是AngularJs的專家,我歡迎有經驗的編碼人員給予建議。如果你認爲Amina是對的,而且我錯了,請讓我知道,最後給出解釋或指向任何文檔的鏈接。我是一個狂熱的讀者。 –

0

如果我理解正確,點擊按鈕時,你想顯示東西,但那是什麼東西取決於你的模型的狀態。所以我會在ngClick上運行一個函數,並根據模型的狀態讓該函數執行不同的操作。