Vue.js VueJS机具转到上一个菜单

Vue.js VueJS机具转到上一个菜单,vue.js,menu,interaction,Vue.js,Menu,Interaction,我正在编写一个应用程序,其中基于嵌套的JSONArray生成一个固定长度的列表。每当从列表中单击任何元素时,如果该元素具有“子数据”数组,则列表将填充此“子数据”。基本上,你可以把它看作是有子菜单的菜单,这些子菜单有子菜单等等 我已经实现了两种方法来转到子级别[next()],这很好,但我不知道如何实现prev()方法来提升菜单中的一个级别。目前,我可以让它上升一级,但如果用户在两级以上,那么我不知道如何跟踪以上所有级别 这是密码笔- 使用您的代码,您可以简单地执行以下操作: 将菜单更改为数

我正在编写一个应用程序,其中基于嵌套的JSONArray生成一个固定长度的列表。每当从列表中单击任何元素时,如果该元素具有“子数据”数组,则列表将填充此“子数据”。基本上,你可以把它看作是有子菜单的菜单,这些子菜单有子菜单等等

我已经实现了两种方法来转到子级别[next()],这很好,但我不知道如何实现prev()方法来提升菜单中的一个级别。目前,我可以让它上升一级,但如果用户在两级以上,那么我不知道如何跟踪以上所有级别

这是密码笔-


使用您的代码,您可以简单地执行以下操作:

将菜单更改为数组,然后每次 返回使用最后一个,并将其从阵列中删除


祝你好运

谢谢@webkit:)我能问一个非常简单的问题吗?这是一个很好的实践吗,我这样做吗?不是真的:),我可能会避免每次都保存整个菜单,可能会保存一个标识符(lvl?)我相信可以进行更多的优化,但这取决于用例的范围和上下文。你能建议一些优化吗?但是感谢@webkit花时间回复
let JSONModel = (_id, _lvl, _title, _data) => {
  return {
    id: _id,
    lvl: _lvl,
    title: _title,
    data: _data
  };
};

let Menu = [
  {
    id: "01",
    lvl: "01",
    title: "menu 1",
    data: []
  },
  {
    id: "02",
    lvl: "01",
    title: "menu 2",
    data: []
  },
  {
    id: "03",
    lvl: "01",
    title: "menu 3",
    data: []
  },
  {
    id: "04",
    lvl: "01",
    title: "menu 4",
    data: [
      {
        id: "01",
        lvl: "02",
        title: "submenu 1",
        data: []
      },
      {
        id: "02",
        lvl: "02",
        title: "submenu 2",
        data: [
          {
            id: "01",
            lvl: "03",
            title: "sub submenu 1",
            data: []
          },
          {
            id: "02",
            lvl: "03",
            title: "sub submenu 2",
            data: []
          },
          {
            id: "03",
            lvl: "03",
            title: "sub submenu 3",
            data: []
          },
          {
            id: "04",
            lvl: "03",
            title: "sub submenu 4",
            data: []
          }
        ]
      },
      {
        id: "03",
        lvl: "02",
        title: "submenu 3",
        data: []
      },
      {
        id: "04",
        lvl: "02",
        title: "submenu 4",
        data: []
      }
    ]
  }
];

let demo = new Vue({
  el: "#app",
  data: {
    input: Menu,
    prevMenu:[]
  }, 
  computed: {},
  created: function () {  
  },
  methods: {
    next: function(val1,val2) {
      if (val1.length != 0) {
        this.input = val1;
        this.prevMenu = val2;
        console.log(this.prevMenu);
      }
    },
    prev: function() {
      console.log(this.prevMenu);
      this.input = this.prevMenu;
    }
  }
});

$("#prevmenu").on("click", function() {
  demo.prev();
});
next: function(val1,val2) {
      if (val1.length != 0) {
        this.input = val1;
        this.prevMenu.push(val2);
      }
    },
    prev: function() {
      let _menu = this.prevMenu.slice(); // this is just to clone the array
      this.input = _menu[_menu.length - 1];
      this.prevMenu.pop();
    }