Использование eval () в Vue2 внутри метода работает и не работает одновременно - PullRequest
0 голосов
/ 25 июня 2019

У меня есть список имен функций внутри компонента, и в зависимости от определенных условий разные функции должны вызываться из одного места.

Мне не удалось создать динамическую функцию в моем шаблоне, поэтому я создал функцию callMethod (name), которая выполняет оценку. Eval РАБОТАЕТ, то есть он вызывает метод в моем компоненте, который затем вызывает метод в родительском компоненте. Тем не менее, я получаю ошибку консоли enter code here TypeError: this.myFunctionName (...) не является функцией

Пока все работает, я не хочу, чтобы эти ошибки выводились в мою консоль.

Если я закомментирую оператор eval и явно введу метод, то он тоже будет работать, но без ошибки.

если

  callMethod(name) {
        eval('this.' + name + '()');
        //this.clickShowDeleteAcceptForm()
        console.log('did I get here?')
    },

вызывается с name = 'clickShowDeleteAcceptForm', тогда я получаю его работу с ошибкой, как объяснено. Вывод на консоль не происходит.

    callMethod(name) {
        //eval('this.' + name + '()');
        this.clickShowDeleteAcceptForm();
        console.log('did I get here?')

    },

если я вызову это (очевидно, переменная 'name' не имеет значения), то это работает без ошибки! Вывод на консоль действительно происходит.

[Vue warn]: Error in v-on handler: "TypeError: this.clickShowDeleteAcceptForm(...) is not a function"

found in

---> <MessagesGuest> at src/components/ManageMessages/Guest.vue
       <ManageMessages> at src/components/ManageMessages/MessagesListing.vue
         <App> at src/App.vue
           <Root>
warn @ vue.runtime.esm.js?2b0e:619
logError @ vue.runtime.esm.js?2b0e:1874
globalHandleError @ vue.runtime.esm.js?2b0e:1869
handleError @ vue.runtime.esm.js?2b0e:1835
invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1852
invoker @ vue.runtime.esm.js?2b0e:2169
original._wrapper @ vue.runtime.esm.js?2b0e:6855
vue.runtime.esm.js?2b0e:1878 TypeError: this.clickShowDeleteAcceptForm(...) is not a function
    at eval (eval at callMethod (Guest.vue?cfd3:95), <anonymous>:1:33)
    at VueComponent.callMethod (Guest.vue?cfd3:106)
    at click (eval at ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"6235b99d-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/ManageMessages/Guest.vue?

1 Ответ

0 голосов
/ 25 июня 2019

Я не знаю, что такое проблам, но использование eval - это большое Нет. Используйте это insted:

callMethod(name) {
    this[name]();
    //this.clickShowDeleteAcceptForm()
    console.log('did I get here?')
},
...