Я создаю приложение для калькулятора в AngularJS, но у меня возникают проблемы с ng-repeat
и ng-click
.ng-click - Использование функций для значений свойств
<div class="col-md-3">
<button ng-repeat="op in operations" name="btn{{ op.name }}"
value="{{ op.symbol }}" class="operationbutton"
ng-click="{{ op.function }}"> {{ op.symbol }}
</button>
</div>
В моих app.js
, внутри моего контроллера, у меня есть операции переменных, привязанных к $scope
.
$scope.operations = [
{ "symbol": "+", "name": "add", "function": "add()" },
{ "symbol": "-", "name": "subtract", "function": "subtract()" },
{ "symbol": "*", "name": "multiply", "function": "multiply()" },
{ "symbol": "/", "name": "divide", "function": "divide()" }
];
Я попытался снять кавычки с имени функций, но оказывается, что значения объекта JavaScript должны содержать строки.
я мог бы сделать что-то вроде этого
ng-click="{{ op.name === 'add' ? add() : op.name === 'subtract' ? subtract()
: op.name === 'multiply' ? multiply() : op.name === 'divide' ? divide() : multiply()}}"
Но это кажется ужасной практикой. Есть ли способ улучшить это, поэтому я могу вызвать функцию, основанную на операции?
Вы можете не назначать фактическую функцию 'op.function', а какой-то строковое выражение? –
Создайте одну функцию с оператором switch для каждого символа, назначьте эту функцию ng-click (без символа). Наконец, чтобы заставить его работать, вам нужно создать другую переменную op_symbol или что-то подобное и использовать ее в вашем методе. Плюс я бы рекомендовал прочитать о синтаксисе bindToController/controllerAs. Это уменьшает использование $ scope в контроллере, потому что вы можете назначить vars, функции для этого функции контроллера - намного проще протестировать такой контроллер. – kornicameister