2016-09-30 27 views
0

不同的選擇,我需要做這樣的事情綁定不同的功能在AngularJS

<select> 
    <option ng-sth="firstMethodToBeCalled()">Option 1</option> 
    <option ng-sth="secondMethodToBeCalled()">Option 2</option> 
<select> 

有沒有辦法做到這一點? 我需要這個,因爲我現在有這樣的代碼:

<select ng-model="someModel" ng-change="callThisFunction()"> 
    <option value="value1">Option 1</option> 
    <option value="value2">Option 2</option> 
    ... 
    <option value="valueN">Option N</option> 
</select> 

而且我想只有兩個選項添加到這個選擇,但調用不同的功能。我可以重構它來調用相同的包裝函數,並確定哪些最終函數將被調用一些條件邏輯,但我想知道是否有可能分配不同。我一直在尋找這一點,並沒有遇到任何解決方案。

+0

您不能將ng模型值傳遞給callThisFunction(),並根據該值確定要調用的邏輯。 –

+0

是的,我可以。但是我不得不重構一些依賴此模型的控制器/服務來維護乾淨的代碼。當然,如果沒有其他事情會發生,我會。 – Zychoo

+0

看這個http://jsfiddle.net/81t6cbjw/483/ – AshBringer

回答

1

不幸的是,恐怕你不能

順便說一句,我會繼續向有NG-變化和它裏面放一些邏輯單功能(並從那裏得叫你的第二個功能),就像這樣:

$scope.callThisFunction = function(){ 
    if(someModel == "baz") 
     myFirstfunction(); 
    else 
     mySecondFunction(); 
} 

它是乾淨的在我看來,這是最可持續的解決方案。

0

是的!有一種方法可以實現這一點。創建一個函數對象,並將鍵作爲您的選擇選項,即您的ng-model,並將值作爲與之對齊的函數並在其中執行操作。

在您的JS

$scope.functions ={ 
    "value1":function(){ 
     console.log("function for option 1 called"); 
    },"value2":function(){ 
     console.log("function for option 2 called"); 
    } 
}; 

在HTML

<select ng-model="someModel" ng-change="functions[someModel]()"> 
    <option value="value1">Option 1</option> 
    <option value="value2">Option 2</option> 
    ... 
    <option value="valueN">Option N</option> 
</select> 

呼叫通過使你的ng-model選定的選項,這將調用對應的功能在ng-change的功能對象。