javascript - Vue JS - 如何使用基于可变数据的模型创建动态输入字段

标签 javascript vue.js vue-component templating v-model

我有一个 Vue 组件,它根据 API 获取的数据创建许多输入。我通过一个方法运行 JSON 中的值,如果某个条件匹配,该方法又会将该值转换为输入字段。这是我的组件的外观:

<template>
    <div>
        <div v-for="(val, index) in data">
            <span>{{val.key}}</span>
            <span :inner-html.prop="checkForEdit(val)"></span>
        </div>
        <b-button @click="submitData">Save</b-button>
    <div>
</template>

export default {
    name: "SomeComp",
    data() {
        return {
            dynamicVars: {}
        }
    },
    methods: {
        ...mapActions("api", ["getData"]),
        checkForEdit(value) {
            if(!value) return '';
            if(value.mustEdit) {
                this.dynamicVars[value.key] = '';
                return '<input type="text" value= "'+ value.text +'" :model='+ this.dynamicVars[value.key]+'>';
            } else {
                return value.text;
            }
        },
        submitData() {
            console.log(this.dynamicVars); //Only the key is present, no value updated
        }
    },
    created() {
        this.getData();
    },
    computed: {
        ...mapState("api", ["data"]),
    }
};

数据如下:

[
    {key: 'name', text: 'John', mustEdit: false},
    {key: 'age', text: '100', mustEdit: true}
]

该数据可以是任何内容,字段不固定,只是格式固定。所以我想动态创建动态 vars 对象以发送到保存它的 API。

现在它只在dynamicVars中创建变量,但是当我更改字段值时它似乎并没有真正使用react。

最佳答案

innerHTML对 Vue 模板、绑定(bind)和 react 性一无所知 - 如果您设置 domNode.innerHTML = '<input v-model="variable">';浏览器将简单地忽略属性 v-model因为它不是标准的 HTML5 属性。

你需要改变你的思维模式,不要用命令式的方式思考,而是尝试以声明式的方式思考——只需在你的模板中写下你想要做的事情,Vue 就会为你创造奇迹。真是太幸运了,我们有 Vue 来为我们做事,而不是用旧的 jQuery 风格编写代码。

<template>
    <div>
        <div v-for="(val, index) in data" :key="index">
            <label :for="'input_' + index">{{val.key}}</label>
            <input v-if="val.mustEdit" :id="'input_' + index" :model='val.text'>
            <span v-else>{{ val.text }}</span>
        </div>
        <b-button @click="submitData">Save</b-button>
    <div>
</template>

export default {
    name: "SomeComp",
    methods: {
        ...mapActions("api", ["getData"]),
        submitData() {
            console.log(this.data);
        }
    },
    created() {
        this.getData();
    },
    computed: {
        ...mapState("api", ["data"]),
    }
};

关于javascript - Vue JS - 如何使用基于可变数据的模型创建动态输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61617883/

相关文章:

javascript - React 保持单个 setState 调用?

javascript - 如何在 React Native 中渲染 JSX 中的嵌套 JSON?

javascript - Webpack 4 捆绑了错误的 javascript

javascript - 从 Vue 中的另一个组件观察某些事件

Vue.js 在 ajax 请求期间禁用组件

javascript - 将变量向下传递给 VueJS 组件

vue.js - 传递给 Vue 中动态组件的 Prop 不是 react 性的

javascript - 如何动态更改 Vue.js 转换

javascript - 求两个端点之间的n个对数间隔

javascript - 如何使整行可点击?