举例,以下的插入写法对于v-show这个指令来说似乎是无效的,isShow的变化不会让view变化,数据没有双向绑定了,所以,如果是新创建的元素,该如何绑定有效的指令呢?
var newXX = document.createElement('div');
newXX.innerHTML = "<span v-show='isShow'></span>"
xx.appendChild(newXX)
举例,以下的插入写法对于v-show这个指令来说似乎是无效的,isShow的变化不会让view变化,数据没有双向绑定了,所以,如果是新创建的元素,该如何绑定有效的指令呢?
var newXX = document.createElement('div');
newXX.innerHTML = "<span v-show='isShow'></span>"
xx.appendChild(newXX)
不知道你是怎么做的,我是这么做的
1.首先你的那个innerHTML里面的东西我放在一个单独的.vue文件里;
2.然后在js文件里面import进来,通过Vue.extend和new创建一个实例;
3.在append后,在Vue.nextTick回调里完成isShow的改变
我的Alert和Comfirm组件部分代码:
Box.vue:
<template>
<transition name="fade">
<div class="ui-alert" v-if="visible">
<div class="ui-msg-box">
<div class="ui-title" v-text="title">提示</div>
<div class="ui-msg" v-text="message"></div>
<div class="ui-buttons">
<a class="btn" href="javascript:;" @click="onOk">确认</a>
<a v-if="isConfirm" class="btn" href="javascript:;" @click="onCancel">取消</a>
</div>
</div>
<div class="ui-mask"></div>
</div>
</transition>
</template>
<script type="text/javascript">
export default {
props: {
title: String,
message : String
},
data() {
return {
isConfirm:true,
visible: false,
onOk:null,
onCancel:null
};
},
methods: {
onOk() {
this.onOk && this.onOk();
},
onCancel() {
this.onCancel && this.onCancel();
}
}
}
</script>
Box.js:
import Vue from "vue";
const AlertVue = Vue.extend(require('./box.vue'));
let Message = (options = {}) => {
let title = options.title || "提示",
isConfirm = (options.isConfirm === undefined || options.isConfirm===false) ? false : true,
message = typeof options === 'string' ? options : options.message;
return new Promise((resolve, reject) => {
let ins = new AlertVue({
el : document.createElement("div")
});
ins.message = message;
ins.title = title;
ins.isConfirm=isConfirm;
ins.onOk = () => {
ins.visible = false;
resolve(true);
}
ins.onCancel = () => {
ins.visible = false;
resolve(false);
}
document.body.appendChild(ins.$el);
Vue.nextTick(() => {
ins.visible = true;
});
});
}
let alert = (options = {}) => {
let title = options.title || "提示";
let message = typeof options === 'string' ? options : options.message;
return new Message(Object.assign({
isConfirm:false
}, {
title,
message
}));
}
let confirm = (options = {}) => {
let title = options.title || "提示";
let message = typeof options === 'string' ? options : options.message;
return new Message(Object.assign({
isConfirm:true
}, {
title,
message
}));
}
export default alert;
export {confirm};
13 回答12.9k 阅读
7 回答2.1k 阅读
9 回答1.7k 阅读✓ 已解决
6 回答1.5k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
创建 DOM 元素之后再创建 Vue 实例,指定 el 包含生成的元素。