附加的 html 内的 vue onclick 函数不起作用
vue onclick function inside appended html not working
我在使用 Vue 组件的附加 HTML 元素内使用 @click vue 函数时遇到问题。
该组件有两个用于在容器内添加和删除 div 的按钮,如下所示:
<div class="col-md-12">
<button class="btn btn-sm btn-warning" @click.prevent.stop="addQuestion()">Add Question</button>
<button class="btn btn-sm btn-danger" @click.prevent.stop="removeQuestion()" v-if="notRemovableQuestion">Remove Question</button>
</div>
添加问题函数如下:
addQuestion(){
var newQuestion = '<div class="questionBox col-md-12 f-left p-2 mt-2" style="border:2px solid blue;">' +
'<div class="col-md-11 f-left">' +
'<input type="text" class="form-control" name="domanda" placeholder="Question" v-model="domanda" />' +
'<input type="text" class="form-control" name="question_description" placeholder="Question Description" v-model="question_description" />' +
'<div class="form-check">' +
'<div class="newAnswerActions f-left full-width col-md-12 mb-2 mt-2">' +
'<a class="btn btn-sm btn-warning" @click.native="addAnswer()">Add Answer</a>' +
'<a class="btn btn-sm btn-danger" @click.native="removeAnswer()" v-if="notRemovableAnswer">Remove Answer</a>' +
'</div>' +
'<label class="form-check-label">' +
'<input class="form-check-input" type="radio" name="risposte" id="exampleRadios1" value="">' +
'<input type="text" class="form-control" name="answer" placeholder="Risposta" />' +
'</label>' +
'</div>' +
'</div>' +
'<div class="col-md-1 f-left">' +
'<button class="btn btn-sm btn-success" @click.prevent.stop="removeQuestion()">SAVE</button>' +
'</div>' +
'</div>';
$(".allQuestionContainer").append(newQuestion); }
新容器添加成功,但添加答案和删除答案两个按钮,调用@click.native="addAnswer()"和@click.native="removeAnswer()"没有在职的。我试过使用或不使用本机和其他任何东西,也尝试过 js onClick 但没有运气,该功能从未达到并且点击事件不起作用。
我做错了什么?有什么建议吗?
谢谢!
我会避开您正在学习的课程,而改用组件。
与其将 HTML 附加到 div,不如创建一个组件,其中包含您当前分配给 newQuestion
的 HTML。然后该组件将负责处理 addQuestion
和 removeQuestion
方法,并且因为它是在 Vue 中注册的组件,所以它会自动响应。
注册组件后,您可以通过执行以下操作来控制它是否显示:
<new-question v-if="showNewQuestion"></new-question>
然后在您的 addQuestion
方法中您只需设置 this.showNewQuestion = true
以便组件显示。 showNewQuestion
显然需要在您的 data
道具中声明并默认为 false。
我没有详细介绍组件的形成,因为我不知道您是否使用 vue-loader
,但可以在 Vue Docs Site 上找到更多信息。
我在使用 Vue 组件的附加 HTML 元素内使用 @click vue 函数时遇到问题。
该组件有两个用于在容器内添加和删除 div 的按钮,如下所示:
<div class="col-md-12">
<button class="btn btn-sm btn-warning" @click.prevent.stop="addQuestion()">Add Question</button>
<button class="btn btn-sm btn-danger" @click.prevent.stop="removeQuestion()" v-if="notRemovableQuestion">Remove Question</button>
</div>
添加问题函数如下:
addQuestion(){
var newQuestion = '<div class="questionBox col-md-12 f-left p-2 mt-2" style="border:2px solid blue;">' +
'<div class="col-md-11 f-left">' +
'<input type="text" class="form-control" name="domanda" placeholder="Question" v-model="domanda" />' +
'<input type="text" class="form-control" name="question_description" placeholder="Question Description" v-model="question_description" />' +
'<div class="form-check">' +
'<div class="newAnswerActions f-left full-width col-md-12 mb-2 mt-2">' +
'<a class="btn btn-sm btn-warning" @click.native="addAnswer()">Add Answer</a>' +
'<a class="btn btn-sm btn-danger" @click.native="removeAnswer()" v-if="notRemovableAnswer">Remove Answer</a>' +
'</div>' +
'<label class="form-check-label">' +
'<input class="form-check-input" type="radio" name="risposte" id="exampleRadios1" value="">' +
'<input type="text" class="form-control" name="answer" placeholder="Risposta" />' +
'</label>' +
'</div>' +
'</div>' +
'<div class="col-md-1 f-left">' +
'<button class="btn btn-sm btn-success" @click.prevent.stop="removeQuestion()">SAVE</button>' +
'</div>' +
'</div>';
$(".allQuestionContainer").append(newQuestion); }
新容器添加成功,但添加答案和删除答案两个按钮,调用@click.native="addAnswer()"和@click.native="removeAnswer()"没有在职的。我试过使用或不使用本机和其他任何东西,也尝试过 js onClick 但没有运气,该功能从未达到并且点击事件不起作用。
我做错了什么?有什么建议吗?
谢谢!
我会避开您正在学习的课程,而改用组件。
与其将 HTML 附加到 div,不如创建一个组件,其中包含您当前分配给 newQuestion
的 HTML。然后该组件将负责处理 addQuestion
和 removeQuestion
方法,并且因为它是在 Vue 中注册的组件,所以它会自动响应。
注册组件后,您可以通过执行以下操作来控制它是否显示:
<new-question v-if="showNewQuestion"></new-question>
然后在您的 addQuestion
方法中您只需设置 this.showNewQuestion = true
以便组件显示。 showNewQuestion
显然需要在您的 data
道具中声明并默认为 false。
我没有详细介绍组件的形成,因为我不知道您是否使用 vue-loader
,但可以在 Vue Docs Site 上找到更多信息。