VUE中使用 zTree -- jQuery 树插件 及 使用时报错 jQuery is not defined 的问题解决

使用需求

时隔两年多,再次使用到了 ztree ,此次是在vue中引入使用,并遇到了一些小问题,在这里把经验和解决办法给你们分享下,共勉。
ztree: zTree -- jQuery 树插件 官网简介 zTree v3.5 Demo 演示
有关ztree的使用,以前整理过两篇在jquery中使用的方法,你们参考下:
zTree -- jQuery 树插件 使用方法与例子
zTree -- jQuery 树插件 构造treeNode JSON 数据对象
zTree v3.5 Demo 演示 OutLook 样式的左侧菜单php

在vue中使用zTree

首先,须要安装插件:

npm install ztree

而后,使用ztree

具体相关的代码以下:css

<ul id="ztree" class="ztree"></ul>

提示:zTree 的容器 className 别忘了设置为 "ztree"!!!vue

import 'jquery'
import  'ztree'
import 'ztree/css/metroStyle/metroStyle.css'
data () {
    return {
      treeNodes: '',
      selectNode: '',
      selectTreeSetting: {
        view: {
          showIcon: true,
          showLine: true,
          dblClickExpand: false
        },
        async: {
          enable: true,
          type: 'get',
          dataType: 'json',
          url: '/xxxx/list.json',
          autoParam: ['id=parentId'],
          dataFilter: this.filter
        },
        data: {
          simpleData: {
            enable: true,
            idKey: 'id',
            pIdKey: 'parentId'
          }
        },
        callback: {
          onClick: this.zTreeOnClick
        }
      }

    }
  },
  mounted () {
    this.initStationSelectTree($('#station'))
  },
  methods: {
    initStationSelectTree (anchor) {
      this.$get('/xxxxx/list.json', {}, response => { //此处是使用的封装过的
        this.treeNodes = $.fn.zTree.init(anchor, this.selectTreeSetting, response.data)
      })
    },
    filter (treeId, parentNode, childNodes) {
      if (!childNodes) return null
      for (var i = 0, l = childNodes.length; i < l; i++) {
        if (childNodes[i].parentId === 'super') childNodes[i].open = true
      }
      curChildNodes = childNodes
      return childNodes
    },
    zTreeOnClick: function (event, treeId, treeNode) {
      // console.log(treeNode);点击树节点获取当前节点 treeNode.name 等,编写须要的逻辑便可
    }
  }

效果如图:

图片描述

报错jQuery is not defined的解决

注意,在ztree中会使用到jQuery ,可能会报错jQuery is not defined,一开始参考vue ztree 结合使用中的办法:jquery

项目build的时候自动加载jquery,而且输出到jQuery中webpack

new webpack.ProvidePlugin({
      jQuery:'jquery',
      $:'jquery',
    })

npm run dev 以前,先build一下,解决了报错 jQuery is not defined 的问题。web

可是,重点来了,本地没问题,打包发布到正式环境依然报错jQuery is not defined,这就奇怪了,因而搜了不少解决报错jQuery is not defined的文章,各类方法试了不少,依然是报错,最后,其中一篇Webpack引入jquery及其插件的几种方法中的第四种方案,终于能成功解决了,本地运行和发布到正式环境都没再报错了。
这里贴一下解决方案:npm

此方法只依赖于本身,彻底不须要任何其余插件与加载器,建立jquery的包装对象jquery-vendor.js

import $ from 'jquery'
window.$ = $
window.jQuery = $
export default $

之后引用jquery时指向jquery-vendor.js

import $ from '../assets/jquery-vendor.js'
import 'jquery-ui'
//  此时UI的方法所有可用,若是须要引用bootstrap,可参照此方法

为了调用方便,可在webpack配置文件中建立jquery-vendor.js的别名

alias: {
    jquery        : 'src/assets/jquery-vendor.js' //    将其指向jquery-vendor.js所在位置
}   
--------------------- 
做者:蚁方阵 
来源:CSDN 
原文:https://blog.csdn.net/yiifaa/article/details/51916560 
版权声明:本文为博主原创文章,转载请附上博文连接!

相关参考

vue ztree 结合使用
Webpack引入jquery及其插件的几种方法
“jQuery/$ is not defined” 解决方法json

相关文章
相关标签/搜索