TransWikia.com

context "this" não retorna correto

Stack Overflow em Português Asked by Adolfo Moro on December 16, 2021

Ao dar um console.log(this),
Eu queria que o THIS do console retornasse o Vue, e não o This do Validate,

this.$ValidateUtil({
        el: this.$refs.cadMain,
        rules: {
          cep: {
            required: true,
            regex: /^d{5}-d{3}$/
          }
        },
        messages: {
          cep: {
            regex: "CEP inválido"
          }
        },
        submitHandler: function () {
          // AQUI!! -->>console.log(this);
          return false;
        }
      })
import Vue from 'vue'
import 'jquery-validation'
var LibsUtil = (function () {
    function LibsUtil() {
    }
    LibsUtil.ValidateUtil = function (options) {
      options = options || {}
      $(options.el).validate({
        rules: options.rules || {},
        messages: options.messages || {},
        submitHandler: function (form) {
          if (typeof options.submitHandler !== 'undefined') {
            options.submitHandler(this, form)
          }
          return false;
        }
      })
      Return Vue;
    };

    LibsUtil.install = function (Vue) {
        Vue.ValidateUtil = LibsUtil.ValidateUtil;

        if (!Vue.prototype.hasOwnProperty("$ValidateUtil")) {
          Vue.prototype.$ValidateUtil = LibsUtil.ValidateUtil;
      }


    };
    return LibsUtil;
}());
export { LibsUtil };
export default LibsUtil;

One Answer

Acontece que tem momentos em algumas funções que mudam o contexto do this, e por isso você não consegue mais acessá-lo, um exemplo disso é a função setInterval, onde dentro da execução da função é mudado o contexto, e com isso você não tem mais acesso ao this da instancia, para resolver isso você pode fazer da seguinte maneira:

todo(){  
    const self = this; //preserva instancia do this na variavel self    
    this.intervalid1 = setInterval(function(){
        self.changes = ((Math.random() * 100).toFixed(2))+'%';
        console.log (this.changes);
    }, 3000);
}

dessa forma dentro do setInterval é possível utilizar a instancia do Vue com a variável "self", você pode utilizar essa mesma estratégia para essa lib de validação

Answered by Vitor Ceron on December 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP