本文介绍: 一些项目有时候,因为需求不同,比如需要SEO或者项目很小,亦或者只需要一个简单管理官网或者网站等等,在这种情况下,我们再去使用类似于vuereact等等这类型框架,就有一点大材小用,也有点费时间。但是,vue这类框架组件开发体验上对开发者非常友好,那么我们如果通过使用原生前端技术实现组件化开发?

前言

一些项目有时候,因为需求不同,比如需要SEO或者项目很小,亦或者只需要做一个简单管理官网或者网站等等,在这种情况下,我们再去使用类似于vuereact等等这类型框架,就有一点大材小用,也有点费时间
但是,vue这类框架的组件化开发在体验上对开发者非常友好,那么我们如何通过使用原生前端技术去实现组件化开发?
在这里插入图片描述

通过JS(ES6)module实现组件化,以及父子组件传值

子组件(原生JS(ES6)组件)

export function Mhtml(Mh) {
    return `<div class="module_html">${Mh}</div>`
}

父组件(原生HTML组件)或者(原生JS(ES6)组件)

<!DOCTYPE html>
<html lang="en"&gt;
<head&gt;
    <meta charset="UTF-8"&gt;
    <meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    <meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    <title&gt;父组件</title>
    <style>
        .module_box{
            width: 100%;
            height: auto;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .module_one{
            width: 40%;
            height: 200px;
            background: aqua;
            color: black;
            text-align: center;
            font-size: 40px;
            font-weight: 700;
        }
        .module_two{
            width:55%;
            height:200px;
        }
        .module_html{
            width:100%;
            height:200px;
            background:#10d1f3;
            color:white;
            text-align: center;
            font-size:35px;
        }
    </style>
</head>
<body>
    <div class="module_box">
        <div class="module_one">父组件展示</div>
        <div class="module_two"></div>
        <script type="module">
            import { Mhtml } from "./module.js";
            let anb=document.querySelector('.module_two');
            //向子组件传值:字符串数组、布尔值等等
            anb.innerHTML=`${Mhtml('子组件:这是一段通过js的module模块插入模板内容')}`
        </script>
    </div>
</body>
</html>
import {Mhtml} from './subassembly.js';
Mhtml('子组件:这是一段通过js的module模块插入模板内容')

通过Object.defineProperty方法实现简单的父子组件传值数据监听方法封装

//原始数据
const data = {
    value: {},
};
let zlag=false;//数据发生变化,该布尔值为true,无变化则为false
//数据监听函数
function Watch(Wdata) {
	//Wdata数据
    console.log(data.value,Wdata)
    let _value=data.value
    Object.defineProperty(data, 'value', {
        get() {
            return _value;
        },
        set(val) {
            if (val !== _value) {
                _value = val;
                zlag=true
                console.log('新数据监听',_value)
            }
        }
    });
    //新数据赋值判断
    data.value=Wdata;
}
//数据监听方法判断新旧数据布尔值抛出
export {
    Watch,
    zlag
}

通过JQuery实现一个HTML文件插入另一个HTML文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>父组件</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <style>
        .hu_box{
            width: 1120px;
            height: auto;
            margin: 0 auto;
        }
        .hu_ys_class{
            width: 100%;
            height: 100px;
            background: rgb(127, 255, 8);
            color: rgb(25, 26, 26);
            text-align: center;
            line-height: 100px;
            font-size: 50px;
            font-weight: 700;
        }
        .hu_iframe{
            width: 100%;
            height: auto !important;
        }
    </style>
</head>
<body>
    <div class="hu_box">
        <div class="hu_ys_class">父组件:当前为父组件</div>
        <div class="hu_iframe"></div>
        <script>
        	//通过JQueryload方法载入远程 HTML 文件代码并插入至 DOM 中。
            $('.hu_iframe').load('./module.html');
        </script>
    </div>
</body>
</html>

通过ES6的module模块以及JQueryload方法可以初步实现一个简单原生HTML的组件化开发,也可以实现父子组件的传值,也可以通过Object.defineProperty实现简单数据监听操作

本文原创,原创不易,如需转载,请联系作者授权

原文地址:https://blog.csdn.net/qq_36034945/article/details/131052853

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11557.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注