AngularJS: применение функции к 2-сторонней привязке данных с помощью кнопки reroll (reloadRoute??)
Я хотел бы понять, как я могу решить эту проблему бесконечного дайджеста Loop, я должен написать условное?
Цель состоит в том, чтобы использовать двухстороннюю привязку данных angular, но мне нужно изменить вывод для случайной сортировки букв.
Мой HTML:
<div class="container-fluid phrase-container text-center">
<!-- == User Phrase Input == -->
<input type = "text" ng-model = "phrase.firstPhrase" placeholder="Please enter phrase"><br><br>
</div>
<div class="container-fluid anagram-container text-center">
<!-- == Final anagram == -->
Anagram: {{phrase.fullAnagram()}}
</div>
Мой JavaScript:
var app = angular.module("app", []);
app.controller('mainController', function($scope) {
$scope.main = {};
$scope.main.title = "AnagramJS";
// Refresh Page acts as reroll button
$scope.reloadRoute = function() {
$route.reload();
};
// Anagram Creation
$scope.phrase = {
firstPhrase: "",
fullAnagram: function() {
var finalPhrase;
finalPhrase = this.firstPhrase.split('').sort(function() {
return 0.5 - Math.random()
}).join('');
return finalPhrase
}
};
});
1 ответ
Решение
Простая модель $watch на области видимости работает нормально, поэтому вы можете использовать:
<input ng-model="word" type="text"/>
<p>
{{anagram}}
</p>
И в JS:
$scope.$watch('word', (newVal, oldVal) => {
if (newVal) {
// set anagram to randomize
$scope.anagram = newVal.split('').sort(function() {
return 0.5 - Math.random()
}).join('');
} else {
// empty anagram if word is empty
$scope.anagram = "";
}
});
Вы можете проверить, как это работает в этой скрипке: https://fiddle.jshell.net/pegla/kemrr0ka/4/
ОБНОВИТЬ:
Нет необходимости использовать маршрутизацию для кнопки reroll, вы можете просто создать функцию и вызывать ее несколько раз, я добавил один способ сделать это в моей последней скрипке: