Как я делаю Ajax. ActionLink обновляют элемент вместо того, чтобы переместиться по целой странице?

Причина, по которой ваш текущий подход не работает, заключается в том, что переменная myDisco в disco () ограничена этой функцией, поэтому, когда вы вызываете ее снова, чтобы попытаться очистить интервал, вместо новой один, содержащий идентификатор интервала.

Один простой способ исправить это - просто поместить идентификатор интервала в data () вместо отдельного логического значения stopIt:

new Vue({
  el: '.container',
  data() {
    return {
      myDisco: undefined,
      color: 'lightgreen',
    }
  },
  directives: {
    'myEvent': {
      bind(el, binding) {
        el.addEventListener(binding.arg, binding.value)
      }
    }
  },
  methods: {
    disco() {
      this.stopDisco(); // just in case there's any chance of calling disco() twice in a row...
      this.myDisco = setInterval(() => {
        this.color == 'lightgreen' ? this.color = 'lightcoral' : this.color = 'lightgreen';
      }, 100)
    },
    stopDisco() {
      clearInterval(this.myDisco); // will be a harmless no-op if myDisco is false
      this.myDisco = undefined; // not strictly necessary, but just to be tidy
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="container">
  <div :style="{color: color}">
    <h1>Directives Exercise</h1>
  </div>
  <button v-my-event:mouseover="disco" v-my-event:mouseleave="stopDisco" class="btn btn-primary">Disco Time!</button>
  
  <div>Interval ID: {{myDisco}}</div>
</div>

9
задан Stephen Jennings 17 May 2009 в 08:25
поделиться

2 ответа

Ваш пример работает на моем компьютере должным образом. Проверьте, действительно ли файлы MicrosoftAjax.js и MicrosoftMvcAjax.js находятся в папке ../../Scripts.

3
ответ дан 4 December 2019 в 13:49
поделиться

Мне пришлось изменить AjaxOptions в моем вызове ActionLink, чтобы он заработал:

<%= Ajax.ActionLink("Update", "UpdateContent", new AjaxOptions() { HttpMethod = "Post", UpdateTargetId = "target", InsertionMode = InsertionMode.Replace })%>
1
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: