AngularJS: применение функции к 2-сторонней привязке данных с помощью кнопки reroll (reloadRoute??)

AngularJS APP

Я хотел бы понять, как я могу решить эту проблему бесконечного дайджеста 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, вы можете просто создать функцию и вызывать ее несколько раз, я добавил один способ сделать это в моей последней скрипке:

https://fiddle.jshell.net/kemrr0ka/5/

Другие вопросы по тегам