最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 在列表页选中侧边目录跳转添加页,返回时如何回显选中之前的目录

    正文概述 掘金(十里青山)   2021-08-21   456

    这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

    近期写项目的时候,遇到个需求,项目里有一个列表页面,在列表里可以点添加跳转到添加页面,添加完成之后或者点击取消需要返回列表页面,这个简单,直接$router.push就完事了。谁知道测试的时候,测试给提bug了,原因是列表页面有一个侧边的地区目录,跳转添加页时候选中的哪个地区,返回列表页时候还要选中哪个地区。

    这个不难,现在就来整理一下思路,首先我们肯定要知道跳转添加页的时候选中的是哪个地区,怎么知道呢?我们在跳转的时候传过去,返回的时候再传过来不就好了。

    // 列表页
    this.$router.push({
      path: '/add',
      query: {
        areaCode: 15
      }
    })
    
    // 添加页
    this.$router.push({
      path: '/list',
      query: {
        areaCode: this.$route.query.areaCode
      }
    })
    

    然后我们在列表页获取地区数据之后,把这个id给选中就可以了,我们这里的侧边目录用的是element-ui的el-tree组件。

    <el-tree
        class="filter-tree"
        :data="spaceData"
        highlight-current
        node-key="areaCode"
        :expand-on-click-node="false"
        ref="tree"
        v-loading="spaceLoading"
        :props="spaceProps"
        @current-change="spaceChange"
    >
        <el-tooltip
            class="custom-tree-node"
            slot-scope="{ node }"
            :content="node.label"
            effect="light"
            placement="right-start"
        >
            <span>{{ node.label }}</span>
        </el-tooltip>
    </el-tree>
    
    
    getSpaceData () {
      // ...
      let queryId = this.$route.query.areaCode
      if (queryId) {
        this.$refs.tree.setCurrentKey(queryId)
      }
      // ...
    }
    

    大功告成,不过刷新几下就会发现,每次请求地区数据的之后,这个参数都会生效,都会默认选中url中这个地区,就算我选了其他地区,刷新之后还是默认选中这个地区,这可咋整?

    想了想,我们在第一次参数第一次生效(也就是从添加页返回列表页默认选中之前的地区)之后,就把这个参数给删除掉是不是就好了,于是去百度,寻找如何删除地址栏参数,然后找到了这个方法history.replaceState,这里就不详细讲解了,感兴趣的同学可以去百度一下,下面附上使用方法。

    /**
     * @name: 修改地址栏参数
     * @param {*} arg 要修改的参数
     * @param {*} arg_val 要修改的新值
     * @return {*}
     */
    changeURLArg (arg, arg_val) {
      let url = location.href
      let unformatStr = ''
      var pattern = arg + '=([^&]*)';
      var replaceText = arg + '=' + arg_val;
      if (url.match(pattern)) {
        var tmp = '/(' + arg + '=)([^&]*)/gi';
        tmp = url.replace(eval(tmp), replaceText);
        unformatStr = tmp;
      } else {
        if (url.match('[\?]')) {
          unformatStr = url + '&' + replaceText;
        } else {
          unformatStr = url + '?' + replaceText;
        }
      }
      if (!!(window.history && history.pushState)) {
        history.replaceState(null, "", unformatStr);
      }
    }
    

    这样我们只需要在回显成功之后修改地址栏参数为空即可。

    getSpaceData () {
      // ...
      let queryId = this.$route.query.areaCode
      if (queryId) {
        this.$refs.tree.setCurrentKey(queryId)
        this.changeURLArg('areaCode', '')
      }
      // ...
    }
    

    这样就大工高成了,知识点虽小,但很实用,希望可以帮助你。用这个方法同样可以实现一些函数进页面只执行一次的需求。


    起源地下载网 » 在列表页选中侧边目录跳转添加页,返回时如何回显选中之前的目录

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元