.html工程使用vue.js组件之间相互如何调用(行政区下拉组件为例)

news/2024/7/10 1:49:46 标签: vue

1、前言

现在我在做一个项目,但是没有node环境仅仅就是单纯的html工程,所有的内容都是通过js来写,也就是说vue中import和require语法也不支持,在这种情况下我们原先在vue工程中使用import {x}来引入的方式就会不适合了,当前使用的ui为element-ui。

下面直接上手吧!

2、初步代码

首先我们先要写一个很基本vue页面在.html文件中:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head th:replace="common/header :: header">
</head>
<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" th:href="@{~/css/ui/reset.css}">
    <link rel="stylesheet" th:href="@{~/css/ui/index.css}">
    <script th:src="@{~/js/ui/adaptionDP.js}"></script>
    <script th:inline="javascript">
        maqueServiceUrl = [[${maqueServiceUrl}]];
    </script>
</head>


<body>
<div id="app">
    <div>
        <el-cascader :options="options" :show-all-levels="false"
                     @change="onChange" v-model="value"
                     :props="{ checkStrictly: true }"
                     placeholder="请选择" clearable></el-cascader>
        1:{{code}}

    </div>
</div>
</body>


<script>
    let parentId = '';
    let selected = undefined;

    var Main = {
        data() {
            return {
                value: '',
                code: '',
                options: [],
            };
        },
        methods: {
            onChange(item) {
                this.parentId = item[item.length - 1];// 注意这是数组[会发生变化]

                let branchSelected = this.options.find(e => e.value === this.parentId);// 通过xzq110000=>筛选获取code值,来判断是否需要[子.push]
                if (branchSelected != undefined) {
                    this.selected = branchSelected
                } else {
                    // 第一遍筛选,ps:this.options.child只用会丢失数据
                    let provinceData = this.options.find(e => e.value === item[0]);
                    this.selected = provinceData.children.find(e => e.value === this.parentId);// 通过xzq110105=>去筛选获取code值,来判断是否需要[子.push]
                }

                // 页面code
                this.code = this.selected.code;
                this.branch();
            },
            branch(){
                if (this.selected === undefined) {// 如果是全国数据=>直接查询
                    this.findTree(this.parentId, this.options)
                } else {// 如果是省、区级数据=>需要筛选数组[子.push]
                    this.findTree(this.parentId, this.selected.children)
                }
            },
            findTree(parentId, arr) {
                request({
                    url: "http://xx.xx.xx.xx:10108/xzq/xzq/current/tree?parentId=" + parentId,
                    method: 'get'
                }).then(resp => {
                    resp.content.forEach(e => {
                        arr.push({
                            "value": e.id,
                            "label": e.xzqName,
                            "code": e.xzqCode,
                            "children": []
                        })
                    })

                })
            },
        },
        created() {
            // 默认获取全国行政区
            this.findTree('xzq0', this.options)
        }
    };
    var Ctor = Vue.extend(Main)
    new Ctor().$mount('#app')

</script>


</html>
<style>

</style>

2、改成全局组件

/**
 * Created by Administrator on 2020/5/13.
 */
let parentId = '';
let selected = undefined;

Vue.component("xzq-cascader", {
    data: function () {
        return {
            value: '',
            code: '',
            options: [],
        }
    },
    methods: {
        onChange(item) {
            this.parentId = item[item.length - 1];// 注意这是数组[会发生变化]

            let branchSelected = this.options.find(e => e.value === this.parentId);// 通过xzq110000=>筛选获取code值,来判断是否需要[子.push]
            if (branchSelected != undefined) {
                this.selected = branchSelected
            } else {
                // 第一遍筛选,ps:this.options.child只用会丢失数据
                let provinceData = this.options.find(e => e.value === item[0]);
                this.selected = provinceData.children.find(e => e.value === this.parentId);// 通过xzq110105=>去筛选获取code值,来判断是否需要[子.push]
            }

            // 页面code
            this.code = this.selected.code;
            this.branch();
        },
        branch(){
            if (this.selected === undefined) {// 如果是全国数据=>直接查询
                this.findTree(this.parentId, this.options)
            } else {// 如果是省、区级数据=>需要筛选数组[子.push]
                this.findTree(this.parentId, this.selected.children)
            }
        },
        findTree(parentId, arr) {
            request({
                url: "http://xx.xx.xx.xx:10108/xzq/xzq/current/tree?parentId=" + parentId,
                method: 'get'
            }).then(resp => {
                resp.content.forEach(e => {
                    arr.push({
                        "value": e.id,
                        "label": e.xzqName,
                        "code": e.xzqCode,
                        "children": []
                    })
                })

            })
        },
    },
    <!-- 标识注册组件结构 -->
    template: "<div><el-cascader :options='options' :show-all-levels='false' @change='onChange' v-model='code' :props='{ checkStrictly: true }' placeholder='请选择' clearable></el-cascader></div>",
    created() {
        // 默认获取全国行政区
        this.findTree('xzq0', this.options)
    }
})

 new Vue({
        el: "#app"
    })

3、去掉new vue部分全部复制到一个单独的如xzq.js文件中

4、其他页面调用(注意每一个页面都要写new vue所以上面就去掉了)

5、遇到的问题

1、将全部内容复制到js中,效果没出来说组件没有正常注册?原因写了new vue在js中,这个部分是单独写在每个.html页面的,js需要去掉;

2、说element-ui没有正常引入,因为header组件我引入了,所有我没有引入,再次引入之后依旧报错,发现element-ui官网是vue引入在前自己引入在后就不会报错了

6、效果图

  1. 组件写在xzq.js中在xzq-cascader-use.html引用组件

http://www.niftyadmin.cn/n/1521658.html

相关文章

高数七重积分的总结_高数复习到头秃?这样刷题才有效!

点击上方「蓝字」关注&#xff0c;更多干货临近期末&#xff0c;很多同学开始求助“高数秘籍”&#xff1a;“为什么我高数例题看得懂&#xff0c;自己做题就很懵&#xff1f;”“多刷题&#xff0c;练得不够。”(学霸冷淡脸)但是没人追着你做题&#xff0c;你的复习进度还好吗…

angular代码规范_angular代码规范

概览目录结构由于一个大型的AngularJS应用有较多组成部分&#xff0c;所以最好通过分层的目录结构来组织。有两个主流的组织方式&#xff1a;按照类型优先&#xff0c;业务功能其次的组织方式这种方式的目录结构看起来如下&#xff1a;.├── app│ ├── app.js│ ├─…

ask调制流程图_一种基于MATLAB的ASK解调仿真方法

龙源期刊网http://www.qikan.com.cn一种基于MATLAB的ASK解调仿真方法作者&#xff1a;方璎翰来源&#xff1a;《科技创新导报》2017年第10期摘要&#xff1a;在分析了ASK解调的优势和产生方法的基础上&#xff0c;利用ASK的解调原理&#xff0c;在MATLAB的平台上对基带信号进行…

期刊分类abcde_论文的级别分为几个,如何划分

论文的级别分为几个&#xff0c;如何划分发布时间&#xff1a;2018-06-01 17:05所属分类&#xff1a;期刊常识公开发表的论文分为六个级别&#xff0c;分别是T类、A类、B类、C类、D类、E类&#xff0c;类别不同&#xff0c;论文的属性不同&#xff0c;有的是类别代表重要的刊物…

react页面渲染之前_reactjs - 在react.js中渲染后滚动到页面顶部

reactjs - 在react.js中渲染后滚动到页面顶部我有一个问题&#xff0c;我没有想法&#xff0c;如何解决。在我的react组件中&#xff0c;我显示了一长串数据&#xff0c;底部显示了很少的链接。点击任何链接后&#xff0c;我用新的链接集合填写列表&#xff0c;需要滚动到顶部。…

jquery ready vue_Vue.js与Jquery的比较 谁与争锋 js风暴

普遍认为jQuery是适合web初学者的起步工具。许多人甚至在学习jQuery之前&#xff0c;他们已经学习了一些轻量JavaScript知识。为什么&#xff1f;部分是因为jQuery的流行&#xff0c;但主要是源于经验开发人员的一个错误的理念&#xff1a;因为jQuery是简单的&#xff0c;所以对…

是、大于等于_圆周率等于4骗局揭秘!

假如我们有一个40x40的正方形然后在中心画出一个圆形在按照边长的方块数量总和除以40x401600然后把1600/3524.54545454545455可是这样的理论有一个漏洞被忽略了1600还需要在减一次352才能接近3.14的近似值&#xff0c;也就是说正确的算式是&#xff08;1600-352&#xff09;/35…

bi power 两个日期挑较早的日期_在 Power BI 中使用相对日期切片器或筛选器 - Power BI | Microsoft Docs...

在 Power BI 中创建相对日期切片器和筛选器Creating a relative date slicer and filter in Power BI09/09/2020本文内容适用对象&#xff1a;面向使用者的 Power BI 服务 面向设计者和开发者的 Power BI 服务 Power BI Desktop 需要 Pro 或 Premium 许可证APPLIES TO: Power B…