我有一个vuejs组件,它显示一个模态对话框,里面有一个小表单。当表单提交时,我想隐藏模态对话框,但不知道如何隐藏。当表单提交时,它调用父表单中的一个方法。
下面是组件代码
<template>
<div>
<div id="todoModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{ title }}</h4>
<button type="button" class="close" data-dismiss="modal">
×
</button>
</div>
<div class="modal-body">
<form id="todoForm" @submit.prevent="$emit('save')">
<div class="form-group">
<label for="name">Todo name</label>
<input
id="name"
v-model="todo.name"
type="text"
class="form-control"
aria-describedby="nameHelp"
placeholder="Enter Todo Name"
/>
<small id="nameHelp" class="form-text text-muted"
>Enter your todo's name</small
>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-primary mr-4" type="submit" form="todoForm">
<span v-if="mode == 'create'">Create</span>
<span v-if="mode == 'update'">Update</span>
</button>
<button
type="button"
class="btn btn-danger mr-auto"
data-dismiss="modal"
@click="
$parent.showModal = false;
$parent.getTodos();
"
>
Cancel
</button>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "CreateTodo",
props: ["mode", "title", "todo", "showModal"],
ref: "createTodoModal",
mounted() {
if (this.mode == "create") {
this.title = "Create Todo";
}
},
methods: {}
};
</script>
<style scoped></style>
这是我的APP.js文件
<template>
<div id="app" class="container mt-5">
<router-view
ref="createtodo"
class="CreateTodo"
name="a"
:todo="todo"
:title="title"
:mode="mode"
:show-modal="showModal"
@save="saveTodo"
></router-view>
</div>
</template>
<script>
import { APIService } from "./APIServices";
const apiService = new APIService();
export default {
name: "App",
data: function() {
return {
mode: "create",
title: "Create Todo",
todo: {},
todos: [],
numberOfTodos: 0,
showModal: false
};
},
mounted: function() {
this.getTodos();
},
methods: {
saveTodo: function() {
if (this.mode == "create") {
apiService.createTodo(this.todo).then(
result => {
if (result.status === 200) {
this.todo = result.data;
this.getTodos();
}
},
error => {}
);
this.showModal = false;
// this.$refs.createtodo.$refs.todoModal
} else if (this.mode == "update") {
apiService.updateTodo(this.todo).then(
result => {
this.getTodos();
},
error => {}
);
this.showModal = false;
} else if (this.mode == "update") {
apiService.updateTodo(this.todo).then(
result => {
this.showModal = false;
this.getTodos();
},
error => {}
);
}
},
}
};
</script>
<style lang="scss">
</style>
我尝试使用ref从APP.js引用Modal,但它不起作用。
8条答案
按热度按时间cwxwcias1#
向关闭X按钮添加ID”
然后创建一个方法来关闭模态:
y3bcpkx12#
像@Dan Stoian回复一样,您可以在vue.js中使用ref:
在你的联络人身上
bvhaajcl3#
如果您正在使用Bootstrap,您需要从它调用Hide和Show方法,因为Modal API会动态创建HTML元素(作为深色背景)
我建议创建一个保存方法而不是调用$emit,在$emit中,您可以在发出save信号之前调用模态hide方法。
在这种情况下不需要showModal。
alen0pnh4#
您可以使用v-if来显示/隐藏模态
在您的组件中:
并将
showModal
设置为真/假以分别显示/隐藏组件。ljo96ir55#
因此,基本上我们所做的是通过引用将子函数暴露给父函数。在_show和_close函数中,我们触发了. show()和. hide(),它们是引导模式函数,我们也可以通过thisModalObj访问它们。我希望这能有所帮助!
现在你可以通过编程调用www.example.com和thisModal.value.close,它会显示并关闭模态函数。thisModal.value.show and thisModal.value.close and itll show and close the modal.
mbyulnm06#
你可以使用这个npm软件包
https://www.npmjs.com/package/vue-js-modal
然后应按以下方式修改代码:
ffdz8vbo7#
如果你不想添加任何额外的关闭按钮,而不是默认的X按钮的模态标题,你可以这样做:
那么在你的方法中
r1zk6ea18#
对于Vuejs 3,这段代码工作完美: