如何从JavaScript中的onclick访问Vue函数?

时间:2019-04-09 19:33:22

标签: javascript function vue.js onclick

我正在构建一个vue组件,我想通过在修改innerHTML时调用onClick属性来调用在vue方法中定义的函数,但这会给我显示错误“ showModal未定义”,如下所示:

这是我的showModal函数,我只是尝试控制台一些数据以确保该函数被调用

methods: {

      showModal: function() {
            console.log("function is called")
            //this.$refs.myModalRef.show();
            //this.account=account;
        }
}

这是我试图通过onclick函数在js中调用该函数的地方:

var inputText = document.getElementById("fileContents");
        var innerHTML = inputText.innerHTML;
 for(var i=0;i<this.violations.length;i++){

          var index=innerHTML.indexOf(this.violations[i]);
          if(index>0) {
            innerHTML = innerHTML.substring(0, index) +"<a href='#' onclick='showModal'>"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);

            inputText.innerHTML = innerHTML;
          }

        }

错误:(索引):1未捕获的参考错误:showModal未定义     在HTMLAnchorElement.onclick((index :: 1)

我打错电话了吗?

谢谢!

编辑:

感谢@Ferrybig知道我能够调用该函数,但是我还有另一个问题,我想将当前的单词传递给我,例如我将其html更改为函数:onclick ='myMethod(violations [i] )',我尝试将this.violations数组设置为像这样的全局变量:

window.violations=this.violations;


但是同样,(变量i)是数组中当前单词的索引,不是要传递给'myMethod'的全局变量,它说(i未定义)..并且我无法将i设置为global变量,因为它的索引每次在循环中都会增加。  我考虑过将要编辑的标签的当前索引发送到函数“ myMethod”,这样我就可以知道我所在的标签以及其在vue组件中的html知道的标签,但是不确定如何做。 >

还有其他建议吗?

4 个答案:

答案 0 :(得分:0)

您未在通话中使用Vue处理程序。将onclick更改为@click

如此:

@click="showModal"

v-on:click="showModal"

答案 1 :(得分:0)

您必须像Method Event Handlers一样使用Vue语法onClick 所以

innerHTML = innerHTML.substring(0, index) +"<a href='#' onclick='showModal'>"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);

需要更改

innerHTML = innerHTML.substring(0, index) +"<a href='#' v-on:click="showModal">"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);

答案 2 :(得分:0)

您好,只需尝试删除href="javascript:void(0)"并添加preds = lm.predict(X_all) 和@ click =“ showModal” 这可能有帮助

答案 3 :(得分:0)

使用Vue模板时,您可以访问易于使用的语法,从而减少了编程时间,强烈建议您改用Vue开始渲染页面。

如果您无法使用Vue渲染页面,您仍然可以使用其他不良技巧:

首先,首先添加一个用于创建的已创建生命周期方法,该方法会将Vue方法的引用移至全局范围:created(){window.myMethod =this.myMethod;}

由于我们随后将方法添加到了全局范围,因此您可以在原始的onclick处理程序中使用mymethod来引用它。

请注意,上述解决方法不支持您的Vue组件的多个实例,但是要支持它会变得更加困难,在这种情况下,您应该使用适当的Vue组件。