最近有个vue项目要用ztree。

然后,我想把一些逻辑提出来作为公共的方法,放到独立的js文件里。

ztreeTool.js

import $ from 'jquery'

export default class ZtreeTools {
static beforeDrag(treeId, treeNodes) {
console.log("beforeDrag")
for (var i=0,l=treeNodes.length; i<l; i++) {
if (treeNodes[i].drag === false) {
return false;
}
}
return true;
}
static beforeDrop(treeId, treeNodes, targetNode, moveType) {
console.log("beforeDrop")
return targetNode ? targetNode.drop !== false : true;
}
static addHoverDom(treeId, treeNode) {
console.log(n)
console.log(treeId, treeNode)
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+ "' title='新建节点' onfocus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn_"+treeNode.tId);
if (btn) btn.bind("click", function(){
var zTree = $.fn.zTree.getZTreeObj(treeId);
zTree.addNodes(
treeNode,
{id:(100 + count), pId:treeNode.id, name:"新节点" + (count++)}
);
return false;
});
}
static removeHoverDom(treeId, treeNode) {
$("#addBtn_"+treeNode.tId).unbind().remove();
};
}

main.js

...
import ZtreeTools from './data/ztreeTools'
Vue.prototype.$ZtreeTools = ZtreeTools;
...

那么问题来了:

ztree demo里有一个外部变量count,我们把ztree逻辑抽出来之后怎么处理这个变量?

我的办法是:

把count作为一个独立的计数器放到一个独立类里,在vue项目启动时实例化这个类。


---

number.js

export default class Number {
constructor() {
this.count = 1
}
}

ztreeTool.js

import $ from 'jquery'
import Number from './number.js'
const n = new Number() export default class ZtreeTools {
static beforeDrag(treeId, treeNodes) {
console.log("beforeDrag")
for (var i=0,l=treeNodes.length; i<l; i++) {
if (treeNodes[i].drag === false) {
return false;
}
}
return true;
}
static beforeDrop(treeId, treeNodes, targetNode, moveType) {
console.log("beforeDrop")
return targetNode ? targetNode.drop !== false : true;
}
static addHoverDom(treeId, treeNode) {
console.log(n)
console.log(treeId, treeNode)
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+ "' title='新建节点' onfocus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn_"+treeNode.tId);
if (btn) btn.bind("click", function(){
var zTree = $.fn.zTree.getZTreeObj(treeId);
zTree.addNodes(
treeNode,
{id:(100 + n.count), pId:treeNode.id, name:"新节点" + (n.count++)}
);
return false;
});
}
static removeHoverDom(treeId, treeNode) {
$("#addBtn_"+treeNode.tId).unbind().remove();
};
static reloadNumber(){
n.count = 1
}
}

红色的部分就是改过的部分。这里其实就已经实例化了。

某个页面.vue

...
created(){
...
this.$ZtreeTools.reloadNumber()
...
},
...

每一个页面开始时把计数器重置一下。

以上。

由一个计数器出发:关于vue使用独立js文件的问题的更多相关文章

  1. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    https://blog.csdn.net/qq_34645412/article/details/78833860 https://blog.csdn.net/qq_34645412/article ...

  2. vue中创建js文件使用export抛出函数,import引入后不能绑定HTML的问题

    在es6中使用export和import实现模块化: js文件: export function test(x) { console.log(x); } vue组件: import {test} fr ...

  3. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    最新的vue里dev-server.js被替换成了webpack-dev-conf.js 在模拟后台数据的时候直接在webpack-dev-conf.js文件中修改 第一步,在const portfi ...

  4. Vue引入远程JS文件

    问题 最近在使用 Vue 做东西,用到钉钉扫描登录的功能,这里需要引入远程的 js 文件,因为 Vue 的方式跟之前的不太一样,又不想把文件下载到本地应用,找了一下解决的方法,貌似都需要引入第三方的库 ...

  5. vue引入静态js文件

    由于一些演示,需要对编码名称等可快速进行修改,需要页面方便配置.由于build后的vue项目基本已经看不出原样,因此需要创建一个文件,并在打包的时候不会进行编译. vue-cli 2.0的作法是在st ...

  6. vue项目 引入js文件

    例如我想将laydate.js引到vue项目中 将用到的js文件放到static文件夹内,在项目的根目录下的index.html内引入 <script src="static/js/l ...

  7. 使用node创建一个服务器,运行vue打包以后的文件

    原理就是使用node里的express框架,搭建一个服务器,然后访问dist文件夹里的文件 prod.server.js var express = require('express') var co ...

  8. 一个不错的angular 字体库( 引用js文件就行)

    https://klarsys.github.io/angular-material-icons/ 使用方法: 1.引入这个js文件, <script src="//cdnjs.clo ...

  9. vue中的单文件组件

    之前都是在html文件中写组件的css,组件的js,组件的模板来演示vue组件的语法,下面介绍以.vue结尾的单文件组件.vue-loader是一个Webpack的loader,可以将单文件组件转换为 ...

随机推荐

  1. Web前端 -- Webpack

    一.Webpack Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 二.Webpack安装 1.全局安装 npm i ...

  2. 记一次uboot升级过程的两个坑

    背景 之前做过一次uboot的升级,当时留下了一些记录,本文摘录其中比较有意思的两个问题. 启动失败问题 问题简述 uboot代码中用到了一个库,考虑到库本身跟uboot版本没什么关系,就直接把旧的库 ...

  3. Consul入门初识

    Consul Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCrop公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源 ...

  4. v-on事件修饰符

    .stop阻止冒泡 .prevent阻止默认行为 .capture实现捕获触发事件的机制(从大到小) .self实现只有点击当前元素时,才能出发事件处理函数 .once只触发一次事件函数 .stop和 ...

  5. Docker Playgrounds

    上级:https://www.cnblogs.com/hackerxiaoyon/p/12747387.html Flink Operations Playground flink的操作场地,从这一小 ...

  6. python计算图像信息熵

    import cv2 import numpy as np import math import time def get_entropy(img_): x, y = img_.shape[0:2] ...

  7. P2194 HXY烧情侣【Tarjan】

    前言 当时和\(GYZ\)大佬一起做这个题,他表示这个题对他很不友好(手动滑稽) 题目描述 众所周知,\(HXY\) 已经加入了 \(FFF\) 团.现在她要开始喜(sang)闻(xin)乐(bing ...

  8. CSS DIV中表格居中显示

    将div的text-align设为center,然后将table的margin设为auto,即: <div> <table style="margin:auto; widt ...

  9. Zuul请求超时

    最近在弄springcloud的时候发现在发送短信的时候zuul总是报错,错误信息如下 com.netflix.zuul.exception.ZuulException: at org.springf ...

  10. python基础知识练习2

    1.请写出如下代码的结果: import copy list1 = [1,2,['a','b'],('c','d')] list2 = list1 list3 = copy.copy(list1) l ...