【问题标题】:laravel vue select selected option not display valuelaravel vue选择选择的选项不显示值
【发布时间】:2018-09-20 05:41:18
【问题描述】:

我正在尝试获取用户任务的选定选项。

myresult

我的预期结果是这样的expected

这是我的 Html 代码

<div class="form-group has-float-label">
    <input v-model="form.name" type="text" name="name" placeholder="Name" class="form-control" :class="{ 'is-invalid': form.errors.has('name') }">
    <has-error :form="form" field="name"></has-error>
</div>

<div class="form-group">
    <select name="tasks" v-model="form.tasks" id="tasks" class="form-control" :class="{ 'is-invalid': form.errors.has('tasks') }">
        <option disabled value="">Please select one</option>
        <option v-for="t in alltask" :key="t"
        v-bind:value="t"  >{{t.name}}
        </option>                            
    </select>
    <br />
    {{form.tasks}}
</div>

下面是我的 JS 代码

<script>
    export default {
        data() {
            return {
                editmode: false,
                users : {},
                alltask : {},
                form : new Form({                   
                    id: '',
                    name: '',
                    tasks: {},
                })
            }
        },
        methods: {            
            loadUsers(){
                axios.get("/api/v1/users").then(({ data }) => (
                    this.alltask = data.alltask,
                    this.users = data.users

                    ));
            },
            editModal(user){
                this.editmode = true;
                this.form.reset();
                $('#users').modal('show');                
                this.form.fill(user);
            }
        },
        created() {
           this.loadUsers();
        }
    }
</script>

这是我的 json 响应

{
    "users": [
        {
            "id": 1,
            "name": "zxc",
            "username": "zxc",
            "tasks": [
                {
                    "id": 1,
                    "name": "cooking"
                }
            ]
        },
        {
            "id": 2,
            "name": "foo",
            "username": "foo",
            "tasks": [
                {
                    "id": 2,
                    "name": "cleaning"
                }
            ]
        }
    ],
    "alltask": [
        {
            "id": 1,
            "name": "cooking"
        },
        {
            "id": 2,
            "name": "cleaning"
        }
    ]
}

v-model 的值与选项值相同,但我没有在单击更新按钮时预先选择它,但是如果我更改选项,我放在 v-model 下方的 v-model 代码根据选项列表本身正在发生变化,我可以将其更新到数据库

【问题讨论】:

    标签: javascript laravel vue.js drop-down-menu


    【解决方案1】:

    问题是您将整个对象绑定为值。即使您从调用中收到的对象和您用于绑定 value 属性以具有相同“内容”(道具和值)的对象,它们也不相同。所以它不会被预选。

    您实际上应该做的只是绑定任务的 id,如果您想显示结果,请从您的 alltask 列表中找到具有该 id 的对象

    https://jsfiddle.net/eywraw8t/382079/

    <select v-model="form.task">
      <option>Please Select</option>
      <option :value="t.id" v-for="(t, i) in alltask" :key="i">{{ t.name }}</option>
    </select>
    
    <p>
      {{ selectedTask }}
    </p>
    

    由于您只选择一项任务,我想知道为什么您有“form.tasks” - 在我的示例中,我将其更改为单数。

    计算出来的 prop selectedTask 可能看起来像这样

    computed: {
      selectedTask() {
        return this.alltask.find(task => {
          return task.id === this.form.task
        })
      }
    }
    

    【讨论】:

    • 我确实得到了选定的值选项。但第一次初始化模态窗口时,它没有显示在选项框上。如果我更改了 {{form.task}} 选项,它会根据我在框中提供的选项进行相应更改
    • 还有一件事让我感到困惑的是,如果该值与您所说的不同,我将无法将其更新到我的数据库并向我抛出错误或其他东西,但数据已更新并显示来自 mydb 的正确值
    • 这在很大程度上取决于您的后端。在对象之间创建引用时,您只需要 id。由于 JSFiddle 正在工作,我似乎不清楚您目前的问题是什么。计算属性 selectedTask 包含您的完整对象。
    • 这是我的小提琴jsfiddle.net/jstanotheract/eywraw8t/399055 我只想获取用户任务初始值
    猜你喜欢
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2021-11-07
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多