Я пытаюсь использовать этот код ниже, чтобы установить значение в $ scope при нажатии кнопки. Кажется, он не работает - как мне это сделать? Я искал множество других вопросов, касающихся кнопок, но это не совсем конкретная проблема.
<input type="button" value="Not Important" ng-click="setImportance(1)">
<input type="button" value="Important" ng-click="setImportance(2)">
<input type="button" value="Extremely" ng-click="setImportance(3)">
$scope.setImportance = function (value){
if (Number(value) == 1){
$scope.question.importance = "notImportant";
console.log("$scope.question.importance: " + $scope.question.importance)
} else if (Number(value) == 2){
$scope.question.importance = "important";
console.log("$scope.question.importance: " + $scope.question.importance)
} else if (Number(value) == 3){
$scope.question.importance = "veryImportant";
console.log("$scope.question.importance: " + $scope.question.importance)
}
console.log(Number(value));
console.log("importance is: " + $scope.question.importance)
}
Поскольку вы ничего не делаете со value
вам может быть намного проще установить значение непосредственно в клике, а не использовать if/else.
<input type="button" value="Not Important" ng-click="question.importance = 'notImportant'">
<input type="button" value="Important" ng-click="question.importance = 'important'">
<input type="button" value="Extremely" ng-click="question.importance = 'veryImportant'">
Существует много других способов добиться того, что вы пытаетесь сделать. Но приятно сначала знать, что не так с кодом.
Сначала вы должны инициализировать объект перед доступом к свойству этого объекта. Для конкретного случая вам нужно инициализировать $scope.question
с пустым объектом. Просто чтобы компилятор знал, что это объект.
$scope.question = {};
Когда вы пытаетесь выполнить $ scope.question.importance без его инициализации, интерпретатор попытается найти вопрос для проверки свойства. Но он не может найти его, поскольку он не определен.
Давайте посмотрим на это с помощью очень простой фигуры.
После того, как значение $ scope.question.importance задано с некоторым значением, оно будет выглядеть так:
Также обратите внимание, что вам не нужно указывать Number
. Оба пути должны работать, это просто не нужно
Тогда это должно сработать!
Другой способ сделать это в contoller - это как в демо ниже или в этом jsfiddle.
angular.module('demoApp', [])
.controller('mainController', function($scope) {
var mapping = {
'1': 'Not important',
'2': 'Important',
'3': 'Very important'
};
$scope.question = {
importance: ""
};
$scope.setImportance = function(value) {
$scope.question.importance = mapping[value];
};
$scope.setImportance(1); //init default
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp" ng-controller="mainController">
<input type="button" value="Not Important" ng-click="setImportance(1)"/>
<input type="button" value="Important" ng-click="setImportance(2)"/>
<input type="button" value="Extremely" ng-click="setImportance(3)"/>
{{question.importance}}
</div>