Как рассчитать время функции в AngularJS

0

Мой код:

HTML

<section ng-controller="randController as rand">
      Skriv inn minimumtall:<br>
      <input ng-model="rand.minimum" type="number" placeholder="Minste tall"><br>
      <div class="tiny"></div>
      Skriv inn makstall:<br>
      <input ng-model="rand.maksimum" type="number" placeholder="Største tall"><br><br>
      <ul class="nav nav-pills" ng-controller="clickController as click">
          <li ng-click="click.randClick()" ng-class="{'active' : click.randCheck(true)}" >
              <a ng-click="rand.tilfeldig()">Randomize!</a>
          </li>
      </ul>
      <div class="tiny"></div><br>
      <pre>Tilfeldig tall = {{rand.tilfeldig()}}</pre>
</section>

JS

.controller('clickController', function ($timeout) {
  this.randClicked = false;
  this.randClick = function () {
    this.randClicked = true;
    $timeout(function() {
        this.randClicked = false;
    }, 1000, true);
  };
  this.randCheck = function (x) {
      return this.randClicked === x;
  };
})

То, что я пытаюсь сделать, - сбросить активный класс <li> -element примерно через 2 секунды (Unclick it после того, как он был нажат в течение 2 секунд). Я получил советы от участников форума, но он все еще не работает. В настоящее время я получаю эту ошибку, которую я не понимаю.

2 ответа

2

В this коде есть проблема с this указателем. Попробуй это:

.controller('clickController', function ($timeout) {
  var that = this;
  this.randClicked = false;
  this.randClick = function () {
    this.randClicked = true;
    $timeout(function() {
        that.randClicked = false;
    }, 1000, true);
  };
  this.randCheck = function (x) {
      return this.randClicked === x;
  };
})
  • 0
    Это soulotion работает, хотя это не всегда работает. Однако это кажется мне очень странным. Если that равно this , почему это проблема использовать this ?
  • 0
    Обновление: этот заголовок работает только тогда, когда поля ввода пусты. (Не удалось отредактировать последний комментарий, потому что я на мобильном телефоне)
Показать ещё 3 комментария
1

Для этого вы можете использовать функцию тайм-аута $.

Сначала вы должны ввести его в свой контроллер следующим образом:

.controller('clickController', function ($timeout) {

Тогда вы можете использовать его так

this.randClick = function () {
  this.randClicked = true;
  $timeout(function() {
    this.randClicked = false;
  }, 2000)
};

Где 2000 - это сумма, которую вы хотите подождать до выполнения кода внутри, в миллисекундах

  • 0
    Спасибо! Я попробую это. Но мне интересно: почему перед тайм-аутом стоит знак $? Или, в более общем смысле: какую цель $ -знак выполняет в угловых?
  • 1
    Обычно $ -sign означает, что это угловая функция, а не нативный Javascript. $ timeout в основном похож на setTimeout, но, как я полагаю, потом будет $ digest, поэтому он обновит все привязки и тому подобное.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню