Vue(四)

组件:

Vue中的组件主要用于提高代码的复用性、‌模块化、‌可维护性、‌可扩展性,‌并增强开发效率。‌

提高代码复用性和模块化:‌

组件是Vue中的一个重要概念,‌它们是可复用的Vue实例,‌拥有独一无二的组件名称。‌通过扩展HTML元素,‌组件可以以自定义的HTML标签形式出现,‌从而将代码组织成较小的、‌易于管理的块。‌这种方式允许开发人员将复杂的应用程序分解为更易于管理的部分,‌减少重复代码,‌提高可维护性。‌

增强可扩展性和开发效率:‌

组件允许创建可扩展且松散耦合的应用程序。‌新功能和特性可以通过添加新组件或修改现有组件轻松添加,‌而无需修改整个应用程序。‌使用预构建的组件,‌开发人员可以专注于应用程序的业务逻辑,‌而不是重复创建通用UI元素,‌从而缩短开发时间并提高生产力。‌

创建动态UI:‌

组件具有响应性和动态更新的能力。‌它们可以接受输入,‌响应事件,‌并渲染基于状态变化的用户界面。‌这允许创建交互式且动态的应用程序。‌

增强可测试性和可维护性:‌

组件封装了特定和孤立的功能,‌使得它们更易于测试和维护。‌开发人员可以专注于测试单个组件,‌而不必担心其对应用程序其他部分的影响。‌此外,‌组件化开发还提供了更好的组织结构,‌使得代码结构更加清晰,‌易于管理和维护。‌

支持可移植性和团队协作:‌

组件化开发有助于提高应用程序的可移植性,‌促进团队协作。‌通过将不同的功能模块分别封装成组件,‌可以减少代码复杂性和维护成本

组件在实例中展示:

这是一个全局的父组件

复制代码
<div id = "app">
  <zujian></zujian>
</div>

实例与组件之间的数据不互通

实例和组件之间的数据是不互通的,

组件的数据一般只能在组件中使用

复制代码
<body>
    <div id = "app">
        <child></child>
    </div>
    <template id="child">
        <div>
            <div>{{str}}</div>
            <div v-for = "item in arr" :key="item">
                <div>{{item}}</div>
            </div>
        </div>
    </template>
</body>

<script>
    let vm = new Vue({
        data(){
            return {

            }
        },
        components:{
            "child":{
                template:"#child",
                data(){
                    return{
                        str:"这是子组件",
                        arr:["哈哈哈哈","和嘿嘿","喂喂喂"]
                    }
                }
            }
        }
    })
    vm.$mount("#app");
</script>

组件之间的复用

父组件与子组件(局部组件)

复制代码
<script>
    let vm = new Vue({
        data(){
            return {

            }
        },
        components:{
            "child":{
                template:"#child",
                data(){
                    return{
                        str:"这是子组件",
                        arr:["哈哈哈哈","和嘿嘿","喂喂喂"]
                    }
                }
            }
        }
    })
    vm.$mount("#app");
</script>

实例是顶级父组件,实例里面的组件和实例的关系就是父子组件

父子组件传递数据

父组件像子组件传递的数据,可以使用正向传递:

复制代码
<body>
    <div id="app">
        <zujian :zufuchuan="str" :zifuchuan2="str2"></zujian>
      //传递数据的地方
    </div>
    <template id="zujian">
        <div>
            <div>{{zufuchuan}}</div>
            <div>{{zifuchuan2}}</div>
        </div>
    </template>
</body>

这里在实例中,zujian这里,用来接受实例传递的数据,并在子组件中用props数组接收,这样这个数据就可以用了

复制代码
<script>
    let vm = new Vue({
        data(){
            return{
                str:"氨基酸覅偶阿萨德否",
                str2:"hi家覅殴打撒女iowj"
            }
        },
        components:{
            "zujian":{
                template:"#zujian",
                data(){
                    return {

                    }
                },
                props:["zufuchuan","zifuchuan2"]
              //接收数据的地方
            }
        }
    })
    vm.$mount("#app");
</script>

用props数组接受数据

子组件向父组件传递数据,不支持

子组件向父组件传递数据

子组件无法直接向父组件传递数据

需要先定义一个run()方法,把数据通过视图模板传递给父组件,父组件写一个methods的fun()监听方法,接收子组件的值,拿到之后,在自己的data中写出来,才能用。

复制代码
<body>
    <div id="app">
        <div>子组件传递过来的数据:{{ziStr}}</div>
        <parent @event="fun"></parent>
    </div>
    <template id="parent">
        <div>
            <button @click="run">子组件像父组件传递数据</button>
        </div>
    </template>
</body>

<script src="../js/vue.min.js"></script>
<script>
    Vue.component("parent",{
        template:"#parent",
        data(){
            return{
                str:"子组件中的数据"
            }
        },
        methods:{
          //传给父组件
            run(){
                this.$emit('event',this.str);
            }
        }
    })
    let vm = new Vue({
        data(){
            return {
                ziStr:""
              //定义出来才能用
            }
        },
        methods:{
          //接收
            fun(value){
                console.log("value::",value);
                this.ziStr = value;
            }
        }
    })
    vm.$mount("#app")
</script>

局部路由

常用于侧边栏或着导航栏中

复制代码
<body>
    <div id="app">
        <ul>
            <li>
                <router-link to="/tianmao">天猫</router-link>
            </li>
            <li>
                <router-link to="/taobao">淘宝</router-link>
            </li>
            <li>
                <router-link to="/jingdong">京东</router-link>
            </li>
        </ul>
        <router-view></router-view>
    </div>
    <template id="tianmao">
        <div>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
        </div>
    </template>
    <template id="taobao">
        <div>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
        </div>
    </template>
    <template id="jingdong">
        <div>
            <h2>田毛毛2</h2>
            <h2>田毛毛3</h2>
            <h2>田毛毛3</h2>
        </div>
    </template>
</body>

需要导入router包

<script src="../js/vue-router.js"></script>

复制代码
<script>
    let vm = new Vue({
        data(){
            return{

            }
        },
        router: new VueRouter({
            routes:[
                {
                  //这个是根路径,也就是刚进页面访问的数据
                    path:"/",
                    component:{
                        template:"#tianmao"
                    }
                },
                {
                    path:"/tianmao",
                    component:{
                        template:"#tianmao"
                    }
                },
                {
                    path:"/taobao",
                    component:{
                        template:"#taobao"
                    }
                },
                {
                    path:"/jingdong",
                    component:{
                        template:"#jingdong"
                    }
                },
            ]
        })
    })
    vm.$mount("#app");
</script>
相关推荐
企微自动化几秒前
Java 实现 Token 安全缓存:使用 ReentrantLock 和单例模式实现并发安全的 Token 管理器
开发语言·javascript·ecmascript
m0_738120726 分钟前
应急响应——知攻善防蓝队靶机Web-1溯源过程
前端·网络·python·安全·web安全·ssh
未来之窗软件服务7 分钟前
浏览器开发CEF(二十一)C#浏览器 Promise模式调用——东方仙盟元婴期
前端·javascript·html·仙盟创梦ide·东方仙盟·东方仙盟vos智能浏览器
dyxal9 分钟前
块状Bootstrap:让金融时间序列“记忆”不丢失的魔法
前端·金融·bootstrap
华仔啊10 分钟前
深入理解 CSS 伪类和伪元素的本质区别
前端·css
HIT_Weston11 分钟前
64、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(八)
前端·ubuntu·gitlab
余生H13 分钟前
前端科技新闻(WTN-3)React v19 引发 Cloudflare 异常事件复盘 - 一次序列化升级,如何影响全球边缘网络?
前端·科技·react.js
HIT_Weston14 分钟前
62、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(六)
前端·ubuntu·gitlab
ID_1800790547318 分钟前
淘宝关键词搜索 API 系列 数据返回参考(附解析与实战)
java·服务器·前端
Hao_Harrision26 分钟前
50天50个小项目 (React19 + Tailwindcss V4) ✨| BackgroundSlider(背景滑块)
前端·typescript·react·vite7·tailwildcss