我习惯于jquery,我正在将我的代码重写为Vue。这个基本的onclick事件需要一些帮助。
原创html:
<div id="main">
<div id="right-nav" onclick="closeRightNav();"></div>
<i onclick="openRightNav();"></i>
</div>
原始javascript:
function openRightNav() {
$("#right-nav").width("100%");
}
function closeRightNav() {
$("#right-nav").width("0");
}
这是我目前所在的地方:
新的HTML:
<div id="main">
<div id="right-nav" @click="closeRightNav"></div>
<i @click="openRightNav"></i>
</div>
使用Vue的新javascript:
var app = new Vue({
el: '#main',
data: {
width: '100%'
},
methods: {
openRightNav() {
$("#right-nav").width("100%"); // not sure how to write this part in Vue?
}
}
});
如何在Vue中正确写入?
答案 0 :(得分:2)
确定。您可以从多个角度处理此问题。我喜欢使用v-show或v-if指令,如下所示:
<template>
<div>
<div v-if="rightOpen" id="right-div" style="width:100%">Right Div</div>
<a @click="rightOpen = ! rightOpen">Toggle</a> // this will actually toggle right sidebar open and close
</div>
</template>
<script>
export default {
mounted() {
},
data: function() {
return {
rightOpen: false
}
}
}
</script>
现在你可以使用v-show代替v-if如果差异是v-show元素将在页面上呈现但未显示,v-if将不呈现元素。
你也可以像这样使用v-class
...
<div :class="{ 'someClass': !rightOpen,'sidebar-opened': rightOpen}" id="right-div">Right Div</div>
....
在这个例子中,someClass将是在呈现组件时加载的那个,假设width:0将在该类中。侧栏打开的类应包含宽度:100%。其他所有内容都与前一个示例保持一致。
答案 1 :(得分:1)
在openRightNav
中您更改了数据并且不直接操纵DOM。只需在您的方法中说:this.width = 100
。
然后你需要绑定你的width
属性:
<div id="right-nav" @click="closeRightNav" v-bind:style="{'width': width + '%'}"></div>
请勿忘记将width
的默认值设置为0。
closeRightNav
{p>你只能写:this.width = 0
答案 2 :(得分:0)
感谢Yousef Kama,我最终是这样做的:
新的HTML:
<div id="main">
<div id="right-nav" @click="closeRightNav" v-bind:style="{'width': width + '%'}"></div>
<i @click="openRightNav"></i>
</div>
New Vue javascript:
var app = new Vue({
el: '#main',
data: {
width: 0
},
methods: {
openRightNav() {
this.width = 100;
},
closeRightNav() {
this.width = 0;
}
}
});