【问题标题】:Vue.js 2: Conditional Rendering not workingVue.js 2:条件渲染不起作用
【发布时间】:2017-09-10 22:09:32
【问题描述】:

我在使用 Conditional Rendering 时遇到问题,因为没有一个示例有效。

这是 Vue 代码:

Vue.component('sub-folder', {
    props: ['folder'],
    template: '#template-folder-item'
});

var buildFoldersList = new Vue({
    el: '#sub-folders',
    data: {
        foldersList: this.foldersList,
        foldersStatus: this.foldersStatus
    },
    created () {
        this.buildFolders()
    },
    methods: {
        buildFolders: function () {
            var self = this;
            $.ajax({
                url: base_url + 'api/folder/get_subfolders/' + browser_folder_id,
                method: 'POST',
                data: {
                    "folder_id": browser_folder_id
                },
                success: function (data) {
                    console.log("Data"); console.log(data.result);
                    self.foldersList = data.result;
                    self.foldersStatus = ( data.result.length > 0 ) ? true : false;
                },
                error: function (error) {
                    self.foldersStatus = false;
                    alert(JSON.stringify(error));
                }
            });
        }

以下是无效的 HTML 代码示例:

            <div v-if="foldersStatus == true" class="list-group" id="sub-folders">
                <sub-folder v-for="folder in foldersList" :key="folder.folder_id" v-bind:folder="folder"></sub-folder>
            </div>
            <div v-else-if="foldersStatus == false" class="alert alert-info" role="alert">
                <strong>Hello!</strong> You don't have any Folders in here!
            </div>

...和:

            <div v-if="foldersStatus == true" class="list-group" id="sub-folders">
                <sub-folder v-for="folder in foldersList" :key="folder.folder_id" v-bind:folder="folder"></sub-folder>
            </div>
            <div v-if="foldersStatus == false" class="alert alert-info" role="alert">
                <strong>Hello!</strong> You don't have any Folders in here!
            </div>

...和:

            <div v-if="foldersStatus" class="list-group" id="sub-folders">
                <sub-folder v-for="folder in foldersList" :key="folder.folder_id" v-bind:folder="folder"></sub-folder>
            </div>
            <template v-else>
            <div class="alert alert-info" role="alert">
                <strong>Hello!</strong> You don't have any Folders in here!
            </div>
            </template>

我已经检查过了,foldersStatus 是正确的,所以我遗漏了一些东西。

更新

我发现了一些对我来说毫无意义的奇怪东西:

            <div v-if="1 == 2" class="list-group" id="sub-folders">
                <sub-folder v-for="folder in foldersList" :key="folder.folder_id" v-bind:folder="folder"></sub-folder>
            </div>
            <div v-if="1 == 2" class="alert alert-info" role="alert">
                <strong>Hello!</strong> You don't have any Folders in here!
            </div>

在这里,第一个div 被隐藏,而第二个保持可见。所以无论发生什么都会推翻代码试图产生的任何行为。

【问题讨论】:

  • '没有一个示例在起作用'> 是否愿意提供有关您的输出与您的预期有何不同的细节?
  • 无论是否有文件夹都会出现引导提示,或者根本不出现。
  • 我认为问题在于引导警报在sub-folders 元素的外部,因此无法控制。

标签: javascript vuejs2


【解决方案1】:

提供数据模板后更新:

https://jsfiddle.net/wostex/63t082p2/13/

....

data 部分中有一个奇怪的代码:

 data: {
        foldersList: this.foldersList,
        foldersStatus: this.foldersStatus
    },

这不是它的使用方式。您最好以某种方式对其进行初始化,而不是将其自链接到自身。没有意义。

检查这个小提琴:https://jsfiddle.net/wostex/63t082p2/10/

它工作正常。您可以通过单击按钮来切换开关。

我猜你应该看看控制台错误输出。我的猜测是某处缺少右花括号。

【讨论】:

  • 您好,控制台没有错误。但是,由于重构代码以符合您的建议,我收到了多个错误:[Vue warn]: Property or method "folder" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option. (found in &lt;Root&gt;) 和:[Vue warn]: Error in render function: (found in &lt;Root&gt;) 和:TypeError: Cannot read property 'title' of undefined
  • 值得注意的是,我保留了原来的template值:template: '#template-folder-item'。
  • @WayneSmallman 由您决定您想要什么,但如果您在一天后仍未从社区获得可行的解决方案,那么它可能说明您的原件中可用的质量和信息量问题......或者更确切地说,缺乏。提供 MCVE 没有害处。
  • @WayneSmallman 你看过 JSFiddle 提供的异步请求了吗?他们在侧边栏上有示例,您可以使用他们的 API 生成虚假的 AJAX 响应。
  • 看:jsfiddle.net/wostex/63t082p2/13这是你需要的吗? “清空列表”为空,“加载列表”为假装1s加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2016-02-07
  • 2019-08-07
  • 2014-01-17
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多