javascript - Vue 2.5 动态下拉点击失败
问题描述
Vue.js 2.5 动态下拉菜单
以下硬编码下拉菜单有效。
<ul class="dropdown-menu" role="menu" id="dropdown">
<li><a href="#" v-on:click="setDate('2018-11-11')">2018-11-11</a></li>
<li><a href="#" v-on:click="setDate('2018-11-12')">2018-11-12</a></li>
</ul>
但我需要动态的日期,所以我将<li>
s 注入<ul>
.
<ul class="dropdown-menu" role="menu" id="dropdown" v-html="dropDown"></ul>
createDates: function(){
var dates = '';
var date = ''
var d = '';
for(var i = 0; i < num_days; i++){
date = today.getDate() - i;
d = today.getFullYear() + '-' + today.getMonth() + '-' + date;
dates += '<li><a href="#" v-on:click="setDate(\'' + d + '\');">' + d + '</a></li>';
}
this.dropDown = dates;
}
问题是单击v-on:click
时不会触发。li
我怀疑当s 被注入并且没有注册为事件时, DOM已经渲染并注册了所有事件。我在Vue.js<li>
中没有找到任何动态下拉列表的示例。
解决方案
在模板中创建一个computed
名为dates
并循环访问它的属性,如下所示:
computed(){
createdDates: function(){
var dates = [];
var date = ''
var d = '';
for(var i = 0; i < this.num_days; i++){
date = today.getDate() - i;
d = this.today.getFullYear() + '-' + this.today.getMonth() + '-' + date;
dates.push(d);
}
return dates;
}
}
模板 :
<ul class="dropdown-menu" role="menu" id="dropdown">
<li v-for="d in createdDates"><a href="#" v-on:click.prevent="setDate(d)">{{d}}</a></li>
</ul>
完整运行示例
new Vue({
el: '#app',
data: {
today: new Date(),
num_days: 10
},
methods: {
setDate(d) {
console.log(d)
}
},
computed: {
createdDates: function() {
var dates = [];
var date = ''
var d = '';
for (var i = 0; i < this.num_days; i++) {
date = this.today.getDate() - i;
d = this.today.getFullYear() + '-' + this.today.getMonth() + '-' + date;
dates.push(d);
}
return dates;
}
}
})
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Vue.delete">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script>
</head>
<body>
<div id="app">
<ul id="dropdown">
<li v-for="d in createdDates"><a href="#" v-on:click.prevent="setDate(d)">{{d}}</a></li>
</ul>
</div>
推荐阅读
- windows - 集会。为什么 GCC 会在 .text 部分的末尾创建额外的指令?
- sql - 在pl sql中使用rownum函数
- c++ - C++ - 重载结构取消引用运算符并在 unique_ptr 中使用它
- firebase - 使用 Kotlin 查找 Firebase 上是否存在值
- javascript - 从 Firebase 实时数据库中获取单个元素
- c# - Autofac 通用存储库服务多个 DBSet
- codenameone - 通过键入 a 来激活 TextArea
- testng - 继承类上TestNG java类的输出令人困惑
- dictionary - Dart 在 Python 中有类似 `defaultdict` 的东西吗?
- git - 重命名存储库后权限被拒绝