#javascript #angularjs
#javascript #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>
И я хочу добавить к этому выбору только еще две опции, но вызывающие другую функцию. Я могу реорганизовать его, чтобы вызвать ту же функцию-оболочку и определить, какая конечная функция должна вызываться с некоторой условной логикой, но мне интересно, есть ли возможность назначить другую. Я искал это в течение некоторого времени и не нашел никакого решения.
Комментарии:
1. Разве вы не можете передать значение ng-model в callThisFunction() и определить логику, которая будет вызываться на основе значения.
2. Да, я могу. Но мне пришлось бы реорганизовать несколько контроллеров / служб, которые полагаются на эту модель, для поддержания чистого кода. Конечно, я это сделаю, если больше ничего не попадется.
3. Посмотрите на это jsfiddle.net/81t6cbjw/483
Ответ №1:
К сожалению, я боюсь, что вы не можете.
Кстати, я бы предпочел иметь одну функцию в ng-change и поместить в нее некоторую логику (и вызвать вашу вторую функцию тоже оттуда), например:
$scope.callThisFunction = function(){
if(someModel == "baz")
myFirstfunction();
else
mySecondFunction();
}
на мой взгляд, это самое чистое решение и наиболее доступное.
Ответ №2:
Да! есть способ, которым вы можете этого добиться.Создайте объект functions с ключами в качестве выбранного вами параметра, который является вашим 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>
Вызовите объект functions в вашем ng-change
, передав ng-model
выбранную вами опцию, которая вызовет соответствующую функцию.